为什么执行到达全局错误处理程序,err的值是404,因为我从/test路由发送res,req-res周期应该结束,它没有抛出错误作为响应,但它将404记录到控制台。
app.get('/test', (req, res, next) => {
console.log('mw 1');
res.send('hello');
});
// if none of the above routes matched
app.all('*', (req, res, next) => {
next(404, `${req.originalUrl} not found`);
});
// Global error Handling
app.use((err, req, res, next) => {
console.log('global error handler: ', err);
res.status(500).json({
status: '❌ error',
message: err.message || 'Internal Server Error',
});
});
字符串
输出:mw 1全局错误处理程序:404
2条答案
按热度按时间yvfmudvl1#
我猜你会看到两个独立的传入请求,一个来自你请求的页面,另一个是浏览器为
/favicon.ico
添加的请求。修改你的错误处理器,输出请求路径如下:
字符串
输出与错误关联的URL。
或者,只需添加此中间件作为第一个请求处理程序:
型
你可以看到每一个请求。
另外,请注意
next()
接受零个或一个参数。它不像你这样接受两个参数。如果你想传递多个值,那么next的参数可以是一个具有多个属性的对象(通常是Error对象)。a1o7rhls2#
在处理所有未定义路由的中间件中,您向下一个传递两个值,第一个值是404。
字符串
next只接受一个值。如果next不带任何参数被调用,那么堆栈中的下一个中间件将被调用,否则它将由全局错误处理中间件处理。
试着修改一下:
型