Javascript 理解Node.js处理顺序
我在理解Node.js中的处理顺序时遇到问题。 我的问题是: 我编写了一个小应用程序,将会话保存在具有以下属性的cookie中:Javascript 理解Node.js处理顺序,javascript,node.js,express,Javascript,Node.js,Express,我在理解Node.js中的处理顺序时遇到问题。 我的问题是: 我编写了一个小应用程序,将会话保存在具有以下属性的cookie中: session.email = email; session.randomHash = randomHash; randomHash变量是一个随机字符串,每次用户登录时生成并保存到db中。 如果具有会话的用户现在想要查看私有页面,则会调用checkSession()方法: exports.checkSession = function(req, res) {
session.email = email;
session.randomHash = randomHash;
randomHash变量是一个随机字符串,每次用户登录时生成并保存到db中。
如果具有会话的用户现在想要查看私有页面,则会调用checkSession()方法:
exports.checkSession = function(req, res) {
if(req.session) {
var User = mongoose.model("User", userSchema);
User.count({email: req.session.email, randomHash: req.session.randomHash}, function(err, count) {
if(count === 0) {
return false;
}
if(count === 1) {
return true;
}
});
}
else {
return false;
}
};
该方法将cookie的randomHash与Db的randomHash值进行比较。
在路由中调用此方法:
exports.init = function(req, res) {
if(hashing.checkSession(req, res)) {
res.render("controlpanel", {title: "Controlpanel", email: req.session.email});
}
else {
res.send("Sorry but you are not logged in. Go to /login");
}
};
现在一定有问题了。
由于节点非阻塞样式,该方法会被调用,但在执行if语句之前不会完成。
我能做些什么?您的
用户中的返回值。count
回调不是检查会话的返回值。User.count
回调直到checkSession
完成后才会运行
将回调传递给checkSession
并在User.count中调用它:
exports.checkSession = function(req, res, callback) {
if(req.session) {
var User = mongoose.model("User", userSchema);
User.count({email: req.session.email, randomHash: req.session.randomHash}, function(err, count) {
if(count === 0) {
callback(false);
}
if(count === 1) {
callback(true);
}
});
}
else {
callback(false);
}
};
把它叫做:
exports.init = function(req, res) {
hashing.checkSession(req, res, function(result) {
if(result) {
res.render("controlpanel", {title: "Controlpanel", email: req.session.email});
}
else {
res.send("Sorry but you are not logged in. Go to /login");
}
});
};
欢迎来到地狱!回调几乎不是“地狱”