【问题标题】:How do I use a callback to fetch data from mysql with node.js and ejs?如何使用回调通过 node.js 和 ejs 从 mysql 获取数据?
【发布时间】:2019-06-28 10:23:07
【问题描述】:

我需要从下面的查询中获取foo

exports.get = function(id, cb) {
    sql = 'SELECT `sidebar`, `test` FROM users WHERE `id` = "' + id + '"';
    con.query(sql, function(err, foo) {
      if (err) { return cb(err) }
      else { return cb(foo) };
    });
}

然后像这样在我的 app.js 上渲染foo

app.get('/dashboard', ensureLoggedIn('/login'),
  function(req, res) {
    const id = req.session.passport.user;
    const foo = db.defaults.set(id) //db.defaults.set calls the query
    console.log(foo); //prints undefined
    res.render('dashboard', { foo:foo });
});

这是我最近的尝试:

app.get('/dashboard', ensureLoggedIn('/login'),
  function(req, res, next) {
    const id = req.session.passport.user;
    db.defaults.get(id, function(err, foo) {
      if (err) return next(err);
      res.render('dashboard', {foo:foo});
      //also tried:
      //return res.render('dashboard', {foo:foo});
    });

上面的尝试根本不呈现页面。 html 加载为:

[object object]

我错过了什么?

【问题讨论】:

    标签: javascript mysql node.js express ejs


    【解决方案1】:

    您正在尝试异步渲染服务器端模板(在获取数据之后),但您不能这样做。

    您可以做的是将模板同步发送到客户端,然后公开一个端点以获取这些数据并相应地修改页面(在客户端)。

    app.get('/dashboard', ensureLoggedIn('/login'), function(req, res) {
      res.render('dashboard');
    });
    
    app.get('/fetchdata', function (req, res, next) {
      const id = req.session.passport.user;
        db.defaults.get(id, function(err, foo) {
          if (err) return next(err);
          res.send(foo);
        });
    })
    

    【讨论】:

    • /fetchdata 的端点在 dashboard.ejs 上会是什么样子?
    • 你需要删除.ejs文件上的foo参数,因为它不起作用,你可以在页面加载后在你的js中对/fetchdata进行api调用。
    猜你喜欢
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多