【发布时间】:2015-07-14 09:04:32
【问题描述】:
我有一条用 Express 写的路线如下:
app.get("/route", function(req, res){
if (someBoolean){
someFunction(stuff, function(user){
...
req.session.user = user;
});
}
res.render("route");
}
当 someBoolean 为真时,应设置会话。然而,在移动到不同的页面后,req.session.user 以未定义的形式返回。然而,检查 someFunction 内的 req.session.user 会返回定义。我发现会话在 someFunction 范围之外变得未定义的解决方案是将 res.render("route") 移动到 someFunction 中:
app.get("/route", function(req, res){
if (someBoolean){
someFunction(stuff, function(user){
...
req.session.user = user;
res.render("route");
});
}
}
然而,当 someBoolean 为 false 时,这会导致路由失败。我认为这是由 Node.js 的异步特性引起的,但我不确定。是什么导致这种情况发生,这是正确的解决方案吗?
【问题讨论】:
-
可以发
someFunction的内容吗?这对于确定 Node 的异步特性是否导致此问题实际上很重要。 -
我现在没有确切的代码,但是 someFunction 涉及从数据库写入/读取,所以这就是为什么我认为它一定是由 Node 的异步性质引起的。跨度>
-
是的,这正是它读取/写入数据库的原因。您必须在回调方法中完成 db 调用后执行您希望发生的任何操作,以确保事件按顺序发生。
标签: javascript node.js express request express-session