【发布时间】:2021-12-12 15:37:05
【问题描述】:
当我尝试按照教程进行操作时。他正在使用一个名为 express-async-handler 的库来自动处理异步函数
问题是我尝试在不使用库的情况下将该代码转换为普通代码,但我发现有些不同。
这是带有 asyncHandler 的代码
router.get('/', asyncHandler(async (req, res) => {
const products = await Product.find({});
throw new Error('Error')
res.json(products);
}))
如您所见,路由出现错误。使用 asyncHandler 时,请求状态会在抛出错误时由中间件更改为 500
const errorHandler = (err, req, res, next) => {
const statusCode = res.statusCode === 200 ? 500 : res.statusCode
res.status(statusCode)
res.json({
message: err.message,
})
}
但是当我尝试使用普通的trycatch block时,error handler middleware没有检测到throw
router.get("/", async (req, res) => {
try {
const products = await Product.find({});
throw new Error('Something went wrong!');
res.json(products);
} catch (err) {
res.json({ message: err });
}
});
那么代码之间有什么区别,据我了解,我转换的代码是正确的。有什么问题吗?
【问题讨论】:
标签: node.js express asynchronous