簡體   English   中英

了解Node.js的處理順序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM