javascript - 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 是未定义的。捕获似乎没有从拒绝中传递错误。
解决方案
在 ExpressJs 中,不支持异步功能。
.catch(err=>{....somecode})
.
您应该使用类似express-promise-router
或使用的中间件try{}catch(e){}
来捕获错误。
推荐阅读
- javascript - Jest Vue 测试 - 无法测试 window.scrollTo fn()
- mysql - Vb.net 错误:我的列表视图正在将文本框中的点转换为逗号
- reactjs - 我尝试了一切但无法启动我的反应服务器
- javascript - DataTables scrollX 似乎不起作用
- mail-server - SPF 包含语句仍未通过
- openedge - 用 debug(longchar) opensge 扩展 debug(character)
- python - 如何从单个熊猫数据框列的值中选择大小为 n 的随机样本,重复值最多出现 2 次?
- javascript - 如何将javascript库集成到react中?
- r - 如果其中一列具有 NA,则从数据集中删除 5 年内相同的国家
- reactjs - 如何使用 React Query 获取数据?