如何使用回调地狱制作auth?

时间:2017-05-10 14:46:19

标签: javascript node.js mongodb asynchronous mongoose

创建一个身份验证系统。当用户进行post - 查询(router.js)时:

var user = require("../controllers/user");

router.post("/login", function(req, res, next){
    user.login(req, function(result) {
        res.send(result);
    });

文件控制器/ user.js:

var mongo = require("./mongo");

exports.login = function (req, callback) {
    var res;
    var login = req.body.login,
        password = req.body.password;

    var user = new mongo.User({
        login: login,
        password: password
    });

    //check if exist user
    user.findOne({
        login: login
    }, function (err, obj) {
        if (err) {
            console.log("user not found -> save");
            user.save(function (err) {
                if (err) {
                    console.log(err);
                } else {
                    callback("OK");
                }
            });
        } else {
            console.log("ELSE");
            if (password == obj["password"]) {
                callback("OK");
            }
        }
    });
}

我想在user.login完成创建/创建新用户时使用 - >用结果调用回调。

exports.login = function(req, callback){
user.findOne(/...login or sign up new user.../);
callback("Success");
}

因此,在用户授权的情况下 - >

user.login(req, function(result) {
        res.send(result); //this executes
    });

如何制作?

1 个答案:

答案 0 :(得分:1)

当我尝试使用user.findOne()查找用户时,主要问题出在语法上。 相反user.findOne()我使用mongo.User.findOne()

 //mongo.User because I required a mongo.js, where connect to db
// where I had a User model
           mongo.User.findOne({ login: login }, function(err, user){
                if(err){
                    reject(err);
                } else {
                    if(user) {
                        if(password == user["password"]) {
                            resolve("Login success.");
                        }
                    } else {
                        console.log("new user creating...");
                    var newUser = new mongo.User({ login: login, password: password });
                    newUser.save(function(err){
                        if(err) {
                            reject(err);
                            console.log("error with saving");
                        } else {
                            resolve("New user created.")
                        }
                    })
                    }
                }
            });

我也使用了Promises(作为上述用户Tomalak),因此router.js中的代码:

function userCheck(req){
        return new Promise(function(resolve, reject){
            user.check(req, resolve, reject);
        });
    }

    userCheck(req).then(result => {
        console.log("promise result");
        res.send(result);
    }, error => {
        console.log("promise error");
        res.send(error);
    });