[英]Understanding Node.js processing order
我在理解Node.js中的處理順序時遇到問題。 我的問題:我編寫了一個小應用程序,將會話保存在具有以下屬性的cookie中:
session.email = email;
session.randomHash = randomHash;
randomHash var是一個隨機String,每次用戶登錄時都會生成並保存到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語句之前會被調用但未完成。 我該怎么辦?
將return
在你的價值User.count
回調不是return
的值checkSession
。 直到checkSession
完成后才運行User.count
回調。
將回調傳遞給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");
}
});
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.