【发布时间】: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