2012-02-25 20 views
2

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

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

这是我的观点

p #{clients} 

引用辅助对象,现在我刚开始的翻译:在视图中的价值。如果我记录结果,我会得到预期的文档结果,但如果我尝试将它推入数组或var,我会得到[object Object]结果。有任何想法吗?

回答

1

这是行不通的,因为你用以下结构:

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

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

另一件事是,当你在一个辅助使用功能,然后在模板中,你应该使用

p #{ clients() } 

,因为它是一个函数。尽管如此,它在这种情况下不起作用。

+0

我实际上已经从助手中取出了它,并将它放回视图调用中,但我似乎无法让它继续工作。如何将mongodb查询的结果分配给var或数组并传入我的视图? – chaddy81 2012-02-25 15:48:53

+0

我最终只是将它粘在session var中,因为我将访问多个地方的数据,这似乎工作正常。谢谢你的帮助。 – chaddy81 2012-02-25 17:06:01

+1

@ChadBartels你正在渲染视图的时刻。如果你有变量'clients',那么你运行'res.render('view_name.jade',{clients_label:client})',你可以在模板中像这样使用'#{clients_label}'。祝你好运! – freakish 2012-02-26 10:35:01

相关问题