Express Error 中间件无法捕获错误

问题描述 投票:0回答:1

我有以下更新端点,它设置了一些重要的指标。它工作正常,但有时它会出错,然后即使我配置了错误中间件,应用程序也会崩溃。

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

node.js express
1个回答
0
投票

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能够捕获异步错误,因此您无需更改代码中的任何内容。

© www.soinside.com 2019 - 2024. All rights reserved.