Javascript 在Jade中循环和显示来自Mongodb的数据

Javascript 在Jade中循环和显示来自Mongodb的数据,javascript,node.js,mongodb,express,Javascript,Node.js,Mongodb,Express,我一直在开发一个实时问答应用程序,用户可以在其中创建讨论,在讨论中他们可以提问,然后向问题添加评论 然而,目前我还停留在问题部分。我可以成功创建一个讨论和一个问题,该问题通过discussionID(作为objectID(discussionID)存储在MongoDB中)链接到讨论 我正在尝试获取与讨论具有相同ID的问题,并将它们传递给Jade,以便我可以在div中循环它们 到目前为止,我的代码是: 对于讨论控制器: function getOne(req, res, next) { Discu

我一直在开发一个实时问答应用程序,用户可以在其中创建讨论,在讨论中他们可以提问,然后向问题添加评论

然而,目前我还停留在问题部分。我可以成功创建一个讨论和一个问题,该问题通过discussionID(作为objectID(discussionID)存储在MongoDB中)链接到讨论

我正在尝试获取与讨论具有相同ID的问题,并将它们传递给Jade,以便我可以在div中循环它们

到目前为止,我的代码是:

对于讨论控制器:

function getOne(req, res, next) {
Discussion.findOne({_id: req.params.id}, function onDiscussionFound(err, discussion) {
    if(!discussion) {
        res.status(404).send("Discussion not found");
    }
    console.log(discussion);
    // we return the json version with cleaned up model to the user
    //res.send(discussion.toJSON());
    var Questions = Question.find({discussionID: discussion.id}, function(err, data){
        console.log(data);
    });
    //console.log(Questions);
    res.render('discussion', { title: discussion.title, description: discussion.description, user: req.user, discussionID: discussion.id, questions: Questions});
});
}
所以我遇到的问题是:

var Questions = Question.find({discussionID: discussion.id}, function(err, data){
        console.log(data);
    });
discussionID是我的Robomongo收集问题中的一个字段,而discussion.id当然是讨论的id

这可能是我的渲染上的一个问题,我不确定,因为我对这个很陌生

在我的Jade discussion.Jade文件中,我尝试检索以下问题:

if questions
      each question in questions
        p= question
[object Object]
[object Object]
function model(doc, fields, skipId) { if (!(this instanceof model)) { return     new model(doc, fields, skipId); } Model.call(this, doc, fields, skipId); }
[object Object]
find
[object Object]
[object Object]
[object Object]
function () { var args = Array.prototype.slice.call(arguments);   _this.wrap(name, fn, context, args); }
function () { var args = Array.prototype.slice.call(arguments); _this.wrap(name, fn, context, args); }
function () { var args = Array.prototype.slice.call(arguments); _this.wrap(name, fn, context, args); }
function () { var args = Array.prototype.slice.call(arguments); _this.wrap(name,   fn, context, args); }
function () { var a
但这给了我一个永无止境的回答,看起来是这样的:

if questions
      each question in questions
        p= question
[object Object]
[object Object]
function model(doc, fields, skipId) { if (!(this instanceof model)) { return     new model(doc, fields, skipId); } Model.call(this, doc, fields, skipId); }
[object Object]
find
[object Object]
[object Object]
[object Object]
function () { var args = Array.prototype.slice.call(arguments);   _this.wrap(name, fn, context, args); }
function () { var args = Array.prototype.slice.call(arguments); _this.wrap(name, fn, context, args); }
function () { var args = Array.prototype.slice.call(arguments); _this.wrap(name, fn, context, args); }
function () { var args = Array.prototype.slice.call(arguments); _this.wrap(name,   fn, context, args); }
function () { var a
等等


然而,数据的My console.log返回到目前为止提出的3个问题。

问题.find是一个异步调用,因此您需要等待它执行完毕,然后使用返回的数据。您的问题用于呈现视图:

var Questions = Question.find({discussionID: discussion.id}, function(err, data){
    console.log(data);
    res.render('discussion', { title: discussion.title, description: discussion.description, user: req.user, discussionID: discussion.id, questions: data});
});
//console.log(Questions);

谢谢!真的,我这几天一直在胡闹,答案很简单!不用担心,你只是把猫鼬模型的所有方法都循环了一遍,哈哈