【发布时间】:2019-06-14 17:20:15
【问题描述】:
我正在使用 async/await 的 express。当 async 函数被拒绝时,将引发异常。
然而,客户不会得到他的请求的回应,让他悬而未决。
我应该如何为未处理的运行时异常添加全局异常处理程序?在这些情况下,服务器应该回复"Server Error" 状态码500。
- 我不想用
try和catch包装我的所有服务器端函数 - 我不想提示下一个请求处理程序出现错误(例如
next(err);) - 我读过https://expressjs.com/en/guide/error-handling.html,找不到像我描述的那样简单的东西(我错过了什么吗?)
这是我的快递应用示例:
const express = require('express');
const app = express();
const port = 8080;
async function validate() {
let shouldFail = Math.random() >= 0.5;
if (shouldFail) {
throw new Error();
}
}
app.get('/', async (req, res) => {
await validate();
res.json({"foo": "bar"});
});
app.listen(port, () => console.log(`listening on port ${port}!`));
注意 - http 函数会随机失败。这仅用于演示目的。
【问题讨论】:
-
使用npmjs.com/package/express-promise-router在这种情况下不需要将代码包装在try catch中,它将由
express-promise-router处理 -
只需安装软件包并包含以下代码
const router = require("express-promise-router")();将用于代替普通快速路由器 -
你为什么不想使用
next?这是作者推荐的模式。 -
@NikKyriakides - 使用
next()使我的代码具有错误意识,我想要简单。知道生态系统的某些部分会处理这个问题 -
听起来您正在为未来的重大问题做好准备。我无法在评论中详细说明为什么您尝试做的事情听起来不明智。
标签: node.js express async-await