【问题标题】:Passing MongoDB data to Jade view in ExpressJS在 ExpressJS 中将 MongoDB 数据传递给 Jade 视图
【发布时间】:2012-02-25 06:27:42
【问题描述】:

我有一个问题希望你能帮忙。基本上,我正在对 MongoDB 集合进行查询并尝试将结果传递回玉视图。

app.helpers({
  clients: function(){
    users.find({uid:req.session.uid}).toArray(function(err, post){
      if(err){
        console.log(err);
      }else{
        return post;
      }
    });
  }
});

这是我在视图中引用辅助对象的地方

p #{clients}

现在我只是将 [object Object] 作为视图中的值。如果我记录结果,我会得到预期的文档结果,但如果我尝试将它推入数组或 var,我会得到 [object Object] 结果。有什么想法吗?

【问题讨论】:

    标签: javascript node.js express pug


    【解决方案1】:

    这行不通,因为您使用以下结构:

    clients: function() {
        (some code)(function() {
            return variable;
        });
    }
    

    return variable; 语句从内部函数返回。但是你需要从外部函数返回变量。那么如何做到这一点呢?其实你不能。您应该在视图中进行查询并将结果存储在请求中,然后将请求变量传递给模板。您不能在帮助程序中使用异步函数。

    另一件事是,当您在帮助程序中使用函数时,您应该在模板中使用

    p #{ clients() }
    

    因为它是一个函数。但是在这种情况下它不起作用。

    【讨论】:

    • 我实际上已经从助手中取出了它并将其放回视图调用中,但我似乎无法让它继续工作。如何将 mongodb 查询的结果分配给 var 或数组并传递到我的视图中?
    • 我最终只是将它粘贴在会话变量中,因为我将在多个地方访问数据,这似乎工作正常。感谢您的帮助。
    • @ChadBartels 您在渲染视图时执行此操作。如果你有变量clients,那么你运行res.render('view_name.jade', { clients_label: client }),你可以在模板中使用它,比如#{ clients_label }。祝你好运!
    猜你喜欢
    • 1970-01-01
    • 2012-11-18
    • 2012-05-25
    • 1970-01-01
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    • 2013-08-16
    相关资源
    最近更新 更多