开发者问题收集

将mongoose返回结果赋值给node js变量

2015-12-10
960

我是 node js 和 mongoose 的新手。我在 node js 中有以下代码。我想将 mongoose 返回的 userData 记录分配给回调之外的变量 user

var user = null;
User.findOne({$and: [{"_id": advisorId}, {"role": "advisor"}]}, {firstName:1,lastName:1, '_id':0},
    function(err,userData) {
        user = userData;
});

一旦我在 user 变量中获得返回结果,我就可以直接将其传递给 jade 视图,如下所示:

TrackSession.find({'advisor_id' : advisorId},fields,function(err, chatHistoryData) {
    var jade = require('jade');
    var html = jade.renderFile(appRoot+'/views/generatePDFHTML.jade', {'chatHistoryData': chatHistoryData,
        'selectedOptions':selectedOptions,
        'advisor':user,
        'tableHeaders':tableHeaders
    });
    console.log(html); return false;
});

但是当我尝试执行此操作时,我得到的 user 变量的值为 null 。有什么具体的解决方案可以实现这一点吗?

1个回答

findOne() 的回调是异步的,它在渲染 jade 后执行。在用户变量获得新值之前,执行会跳转到“TrackSession”。

您应该将 var html = ... 放在回调中。

var user = null;
User.findOne({$and: [{"_id": advisorId}, {"role": "advisor"}]},{firstName:1,lastName:1, '_id':0}, function(err,userData,user) {
        user = userData;
        
        TrackSession.find({'advisor_id' : advisorId},fields,function(err, chatHistoryData) {
        var jade = require('jade');
        var html = jade.renderFile(appRoot+'/views/generatePDFHTML.jade', {'chatHistoryData': chatHistoryData,
            'selectedOptions':selectedOptions,
            'advisor':user,
            'tableHeaders':tableHeaders
        });
        console.log(html); return false;
    });
});
Alan Bogu
2015-12-10