我按照这个顺序定义了我的应用程序路由
app.use(express.json());
app.use(express.static(`${__dirname}/public`));
app.use('/api/v1/tours', tourRouter);
app.use('/api/v1/users', userRouter);
app.all('*', (req, res, next) => {
const error = new AppError(
`This ${req.originalUrl} is not on the server`,
404,
);
next(error);
});
app.use(globalErrorHandler);
字符串
AppError是一个自定义错误对象的类,globalErrorError是一个根据来自next()
的错误对象发送错误响应的函数。
我的问题是,'*'路由与我以前使用tourRouter处理的所有路由一起运行。我不知道为什么会发生这种情况。它不是这样做的,只是发生了一次,直到我写这个问题的时候仍然发生。
注意事项:Postman从我定义的路由中给了我正确的响应,但是VSC中的终端给了我 “cannot send header after it sent” 错误。
我不知道该怎么办,因为我不知道为什么会发生错误。
1条答案
按热度按时间yzxexxkh1#
我发现了一个错误,那就是我用一个名为catchAsync()的函数敲了我的路由器处理程序函数
字符串
我把这个函数更新成
型
我这样做是因为catchAsync函数在fn()结束后调用next,这会导致运行堆栈中的下一个中间件,即globalErrorError
型
运行并发送另一个响应,从这里错误发生了,但让我仍然感到困惑的是,代码工作正常,然后开始抛出错误