【问题标题】:passing a variable from routes.js to my .ejs page将变量从 routes.js 传递到我的 .ejs 页面
【发布时间】:2017-12-30 10:01:48
【问题描述】:

我正在尝试从我的数据库中传递一个查询

var aboutUser = connection.query("SELECT about FROM users WHERE username = ?", req.user, function(err, rows) {});`

我想像这样传递它

res.render('profile.ejs', {
            user: req.user,
            about: aboutUser // get the user out of session and pass to template
          });`

我已经在我的 ejs 页面上尝试过这个

<%= about %>

但是关于没有定义,有人可以帮我看看吗

【问题讨论】:

    标签: javascript node.js express ejs var


    【解决方案1】:

    数据库查询的结果被放入回调函数的行部分。它不是通过使用查询本身返回的。因此,如果您要使用它并将其传递给您的模板,您可以将它们放入回调函数中。试试这个:

    connection.query("SELECT about FROM users WHERE username = ?",
    req.user, function(err, rows) {
        res.render("profile", {user: req.user, about: rows[0]}) //Notice you don't need to add ejs to the end of the file
    })
    

    【讨论】:

      【解决方案2】:

      connection.query 的返回值不是查询的结果。相反,它是一个允许高级使用查询的排​​序对象。结果是传递给您提供的回调的第二个参数。在您的示例中,它被命名为rows。这样做的原因是因为查询是异步的。查询完成时调用回调。

      没有完美的方式来回答您的问题,因为正确执行此操作取决于您的应用程序的结构。但是,作为临时修复,这应该可以:

      var aboutUser = connection.query("SELECT about FROM users WHERE username = ?", req.user, function(err, rows) { res.render('profile.ejs', { user: req.user, about: rows }); });

      从长远来看,出于各种原因,您不想这样做,但至少这应该让您开始。

      【讨论】:

      • 太棒了,我补充说,但在 profile.ejs 上,我仍然收到关于未定义的错误:(有什么建议吗?
      • 你能把你的代码放在 GitHub 上让我们看到吗?目前没有关于该问题的足够信息。
      猜你喜欢
      • 1970-01-01
      • 2018-03-20
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 2016-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多