我有以下更新端点,它设置了一些重要的指标。它工作正常,但有时它会出错,然后即使我配置了错误中间件,应用程序也会崩溃。
app.put('/ca-points', async (req, res) => {
const { id } = req.query.id;
await ComputePoints(id);
return res.send("ok");
});
app.use((err, req, res, next) => {
sentry.error(err);
return res
.status(500)
.json({ status: 500, message: "Something went wrong." });
});
所以我需要在每个控制器上使用
try/catch
?
Express 在 Express 5(测试版)之前不会捕获异步代码中发生的错误,您需要捕获它们并将其传递给
next
函数。
所以你的控制器会是这样的
app.put('/ca-points', async (req, res, next) => {
const { id } = req.query.id;
try {
await ComputePoints(id);
return res.send("ok");
}catch(e){
next(e)
}
});
如果您担心用
async
块包装每个 try/catch
函数,那么您可以使用这个包 express-async-errors ,它使express能够捕获异步错误,因此您无需更改代码中的任何内容。