节点JS + Express:错误对象未在承诺拒绝中捕获

时间:2018-08-15 03:44:40

标签: javascript node.js express promise es6-promise

在Express Web应用程序中,我定义了一个返回Promise对象的函数。

login: function(un, pass) {
        result = {};
        var loginOk = new Promise(
            function (resolve, reject) {
                if (result.hasOwnProperty('sessionToken')) {
                    var user = {username: result["username"], sessionToken: result["sessionToken"]};
                    resolve(user); // fulfilled
                } else {
                    var reason = new Error('login failed');
                    console.log("LOGIN FAILED:" + reason.message);
                    reject(reason); // reject
                }

            }
        );
        return loginOk;
}

在调用登录功能的路由中:

router.get('/login', function(req, res, next) {
    const unm = req.query.username;
    const pwd = req.query.password;

    db_user.login(unm, pwd)
    .then(function(result) {
        console.log("/login:" + JSON.stringify(result));
        res.send(result);
    }).catch(function (error) {
        // Login failed
        console.log(error);  // This printed out {"Error":{}}
        console.log(error.message); // This printed out undefined. but supposed to be "login failed"!!!
        res.send(error.message);
    });
});

我想将拒绝回调函数生成的错误消息返回给用户前端视图。问题是错误始终为空,并且error.message未定义。捕获似乎没有使错误从拒绝项中转移过来。

1 个答案:

答案 0 :(得分:0)

在ExpressJs中,不支持异步功能。 .catch(err=>{....somecode})

您应使用express-promise-router之类的中间件或使用try{}catch(e){}来捕获错误。