2012-02-06 43 views
0

我有这个express.js路线有节点/蒙戈/功能怪异的行为/作用域

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,商务部价值,而params内[“类别”值是蛮好的。然而,在这个范围之外,它消失了,参数[“类别”]变成了“未定义”。现在刷新一次页面后,它将恢复正常行为,并且在节点的其余运行过程中似乎保持这种状态。

为什么会出现这种情况?

回答

2

发生这种情况是因为console.log在您传递给findOne的回调之前被调用。它的工作原理,如果你改变这样的预期:

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

而且,看到的答案类似的问题像this one