在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未定义。捕获似乎没有使错误从拒绝项中转移过来。
答案 0 :(得分:0)
在ExpressJs中,不支持异步功能。
.catch(err=>{....somecode})
。
您应使用express-promise-router
之类的中间件或使用try{}catch(e){}
来捕获错误。