【问题标题】:Assign mongoose return result to node js variable将猫鼬返回结果分配给节点js变量
【发布时间】:2015-12-10 06:16:03
【问题描述】:

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

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

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

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;
});

但是当我尝试这样做时,我得到null 作为user 变量的值。有没有具体的解决方案来实现这一点?

【问题讨论】:

  • 为什么不把渲染代码放在 findOne() 回调中?
  • 为什么将“用户”传递给回调?我认为您在更高范围内隐藏“用户”。
  • Opps 是错误的,你现在可以检查一下我已经编辑了问题。
  • @SarathNair:我已经编辑了问题,您可以再次检查代码吗?实际上,我想要包含用户详细信息的数据。不幸的是,它不支持关系映射,我怎么能通过 advisorId 获取用户的数据。
  • 在您编辑的版本中,“TrackSession”的 find() 回调有可能在“User”的 findOne() 回调之后执行,并且渲染将按预期工作。但它仍然不稳定,有时可能无法正常工作。您应该将 TrackSession 放在 findOne() 回调中,这是肯定的。

标签: javascript node.js mongodb express


【解决方案1】:

findOne() 的回调是异步的,它会在你渲染完玉后执行。在用户变量获得新值之前执行跳转到“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;
    });
});

【讨论】:

  • 感谢您的解决方案。
猜你喜欢
  • 2018-02-17
  • 1970-01-01
  • 2014-01-09
  • 1970-01-01
  • 2018-08-22
  • 2022-01-26
  • 2022-01-06
  • 1970-01-01
  • 2014-07-25
相关资源
最近更新 更多