下面是我的nodejs代码
const express = require('express');
const app = express();
app.use('/', (req, res, next) => {
console.log("In interceptor");
next();
});
app.use('/users', (req, res, next) => {
console.log('In /users middleware');
res.send('<h1>From "/users" handler </h1>');
});
app.use('/', (req, res, next) => {
console.log("Default handler");
res.send('<h1>From default handler</h1>');
});
app.listen(3000);
从浏览器(Chrome和Edge)发出请求时控制台输出
http://localhost:3000
******************
In interceptor
Default handler
In interceptor
Default handler
******************
http://localhost:3000/users
******************
In interceptor
In /users middleware
In interceptor
Default handler
******************
但是当使用curl
发出请求时,我看不到多次调用
curl http://localhost:3000
******************
In interceptor
Default handler
******************
curl http://localhost:3000/users
******************
In interceptor
In /users middleware
******************
有人可以解释为什么从浏览器发出请求时多次调用中间件功能吗?
答案 0 :(得分:1)
从浏览器加载页面时看到多个请求的通常原因是以下两点之一:
通过添加以下内容,您可以确切地看到每个请求的目的:
console.log(req.url);
到您的中间件。
答案 1 :(得分:0)
发现它是由于浏览器发出的/favicon.ico
请求而发生的。添加特定的处理程序(如下所示)可防止两次调用默认处理程序
app.use('/favicon.ico', (req, res, next) => {
console.log('favicon handler');
res.sendStatus(200);
});