javascript - 如何处理异步 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)
全面的:
- 我们的代码是反模式的吗?
- 路由应该使用异步吗?
- 是否应该持续使用
try
/块?catch
- 什么是正确的模式?
如果有人有时间回复,非常感谢。
解决方案
你不应该try/catch
在每条路线上。您可以使用中间件来捕获处理所有错误并使用适当的状态代码进行响应。一个简短的例子是:
app.use(function (err, req, res, next) {
console.error(err.stack)
res.status(500).send({ status: false })
})
您可以在此处阅读有关 Express 中的错误处理的更多信息
推荐阅读
- java - 引起:org.springframework.data.mapping.PropertyReferenceException:没有找到类型用户的属性findAll - Redis
- python - 如何在python中将字符串(描述数组)转换为数组
- php - 关闭浏览器和新用户登录后的会话销毁
- c# - 在 C# 中处理泛型集合
- android - Android Studio 创建实时模板
- android - 客户端到客户端的短消息
- python - 项目范围内导入 Python 库
- amazon-web-services - AWS EC2 实例变得无响应
- nginx - 找不到您要查找的页面错误消息 - nginx
- c - 防止循环中的无效数组输入