首页 > 解决方案 > 如何处理异步 Express 中的错误?

问题描述

背景:我有一个相当大的项目,它是一个社交媒体后端。我们在 JS 中使用 MondoDB (w/mongoose) 和 Express。我的问题是:是否有必要继续将每条路由包装在 try/catch 块中以确保响应?目前几乎所有(有些需要返回更具体的错误)我们的路线看起来像这样:

router.get('/path/to/route', async (req, res, next) => {
    try {
        // function of route
    } catch (err) {
        res.status(500).send({ status: false })
    }
}

我怀疑对于每条路线的持续使用try/catch函数的使用可能存在一些反模式。async我的想法是简单地制作一个发送 500 响应的标准错误处理程序,但是我相信try/catch仍然需要使用next(err)

全面的:

如果有人有时间回复,非常感谢。

标签: javascriptnode.jsmongodbexpressasynchronous

解决方案


你不应该try/catch在每条路线上。您可以使用中间件来捕获处理所有错误并使用适当的状态代码进行响应。一个简短的例子是:

app.use(function (err, req, res, next) {
  console.error(err.stack)
  res.status(500).send({ status: false })
})

您可以在此处阅读有关 Express 中的错误处理的更多信息


推荐阅读