首页 > 解决方案 > Node JS + Express:错误对象未在 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 是未定义的。捕获似乎没有从拒绝中传递错误。

标签: javascriptnode.jsexpresspromisees6-promise

解决方案


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

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


推荐阅读