node / mongo / functions / scoping的奇怪行为

时间:2012-02-06 09:15:43

标签: javascript node.js mongodb express

我有这个express.js route

app.get("/explore/:category?", checkCategory, function(req, res){   
     var params = new Array();
     params["path"] = req.route.path;

     Category.findOne({hash:category}, function (err, doc) {
         params["category"] = doc;
     });

     console.log(params);

当你在findOne中时,doc值和params [“category”]值都很好。然而,在该范围之外,它消失了,并且params [“category”]变得“未定义”。现在刷新页面一次后,它恢复正常行为,并且在节点运行的其余部分中似乎保持这种状态。

为什么会出现这种情况?

1 个答案:

答案 0 :(得分:2)

这是因为在传递给findOne的回调之前调用了console.log。如果你改变它,它会按预期工作:

Category.findOne({hash:category}, function (err, doc) {
    params["category"] = doc;
    console.log(params);
});

另外,请参阅this one等类似问题的答案。