【问题标题】:Node JS + Express: Error object not caught on Promise rejectNode JS + Express:错误对象未在 Promise 中被拒绝
【发布时间】:2019-01-21 23:23:04
【问题描述】:

在我的 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 是未定义的。 catch 似乎没有从拒绝中传递错误。

【问题讨论】:

  • 你能不能 console.log(error) 看看那是什么 - 顺便说一句,你知道你的 login 函数总是会拒绝,对吧?
  • 是的,我已经测试了一些失败的密码来触发拒绝。 "console.log("登录失败:" + reason.message);"实际上打印出了我想要的。
  • 我在 catch 函数中添加了 console.log(error)。当我使用假密码触发路由以减少登录失败时,它会打印出 {"Error":{}}。
  • 你能确认catch 正在被执行吗?
  • in the catch function printed out nothing - 但是你已经添加了This printed out {"Error":{}} - 所以......这不是什么,对吧

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-08
    • 2020-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    相关资源
    最近更新 更多