exports.getTour = catchAsync(async (req, res, next) => {
const tour = await Tour.findById(req.params.id);
if (!tour) {
next(new AppError('No tour found with that ID', 404));
}
res.status(200).json({
status: 'success',
data: {
tour
}
});
});
如果tour变量为空,我调用next()方法并使用类构造函数在其中创建错误,但即使在调用next()之后,响应也作为请求的响应发送,然后我收到'[ERR_HTTP_HEADERS_SENT]:'错误。为什么即使在调用next之后,块也没有退出?
3条答案
按热度按时间yx2lnoni1#
因为如果
tour
为空,则需要return
来中断函数。所以这样做
bkhjykvo2#
next()
将当前回调函数传递给具有相同URL的下一个请求。如果未在回调函数中激活响应,则无法完成请求。要完成回调函数,应使用任何函数编写响应。要在回调时使用next()
,应存在另一个请求,例如这是一个关于
next()
的快速文档示例。如果您想结束发送错误,那么只需使用JSON
res.status(404).send("error": "No tour found with that ID")
进行响应。lndjwyie3#
在中间件中,您应该执行next()函数,尝试