猫鼬似乎满足了错误的承诺(节点js)

时间:2017-05-01 16:48:44

标签: javascript node.js mongodb mongoose promise

我正在尝试重构一些继承的代码。在每个端点都有相同的验证码。我想把它拉出来用它自己的方法。我是承诺的新手,但我认为这就是我想要使用的东西。问题似乎是在User.findOne调用中解决,并以未定义的prom.promise退出。

欢呼声 鲍勃

function validateUser(req) {
    var prom = q.defer();
    var token = getToken(req.headers);
    if (token) {
        console.log("have a token")
        var decoded = jwt.decode(token, config.secret);
        console.log("now going to look for the user")
       //Problem exit is on next line
        User.findOne({
            name: decoded.name
        }, function (err, user) {
            if (err) throw err;
                prom.reject(err);
            if (!user) {
                console.log("no user found")
                prom.reject("Authentication failed. User not found.")

            } else {
                console.log("user found returning true")
                prom.resolve(true);

            }
        })

    } else {
        console.log("no token found")
        prom.reject("No token provided.")
    }
    return prom.promise;
}

1 个答案:

答案 0 :(得分:0)

  

当mongoose自己返回时,为什么要使用promises。

function validateUser(req, callback) {
var token = getToken(req.headers);
if (token) {
    var decoded = jwt.decode(token, config.secret);
    User.findOne({
        name: decoded.name
    }, function (err, user) {
        if (err) throw err;
            callback(err);
        if (!user) {
            callback("Authentication failed. User not found.")

        } else {
            console.log("user found returning true")
            callback(null, {status:true, userData:user});
        }
    })

} else {
    callback("No token provided.")
}
}
  

在上面的代码中,

     

如果未找到token,则在第一次尝试时返回错误并返回错误。如果找到token,那么它会被连续解码,如果结果是错误则在数据库中匹配,那么如果没有找到用户,则使用err参数调用回调,否则为空匹配消息在回调错误部分中发送。但是在final中返回status和userData的成功。

相关问题