考虑以下Express应用:
const express = require('express')
const app = express()
app.use((req, res, next) => {
console.log('\n\nALWAYS')
next()
})
app.get('/a', (req, res) => {
console.log('/a: route terminated')
res.send('/a')
})
app.use((req, res) => {
console.log('route not handled')
res.send('404 - not found')
})
app.listen(3000, () => {
console.log('listening on 3000')
})
访问/a
控制台结果:
ALWAYS
/a: route terminated
ALWAYS
route not handled
有人可以解释为什么还有另一个中间件日志吗?我只希望控制台日志有2行。代替
ALWAYS
route not handled
已被记录。
答案 0 :(得分:0)
这是一个非常常见的混淆点。可能的原因是您在浏览器中转到/a
,浏览器发出了两个请求。一个用于/favicon.ico
,另一个用于/a
(这是浏览器在您访问新站点时所做的,它们以前并未为该站点提供图标-它们显示的小字形代表了某些地方的网站在浏览器中)。
如果您在中间件和404处理程序中记录请求URL,您将看到发生的事情的详细信息:
const express = require('express')
const app = express()
app.use((req, res, next) => {
console.log('\n\nRequest for: ', req.url);
next();
})
app.get('/a', (req, res) => {
console.log('/a: route terminated')
res.send('/a')
})
app.use((req, res) => {
console.log('route not handled for ', req.url);
res.send('404 - not found');
});
app.listen(3000, () => {
console.log('listening on 3000')
})