node.js - 当浏览器发出请求时,express 中间件函数被调用两次

标签 node.js express

下面是我的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
******************

有人可以解释为什么当浏览器发出请求时中间件函数会被多次调用吗?

最佳答案

从浏览器加载页面时看到多个请求的常见原因有以下两种:

  1. 浏览器自动请求 favicon.ico 文件。
  2. 浏览器尝试从 HTML 文件(脚本文件、图像、CSS 文件等)加载某些资源

您可以通过添加以下内容来准确查看每个请求的用途:

console.log(req.url);

到您的中间件。

关于node.js - 当浏览器发出请求时,express 中间件函数被调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58045926/

相关文章:

javascript - typescript 中的静态类

javascript - 使用 Node.js 实时读取文件

node.js - nextjs做一个API请求正常吗?

javascript - 如何在express js中将多个请求合并到一个请求对象中?

node.js - Node Express "favicon.ico"未找到错误

javascript - 模块返回异步初始化的对象

node.js - 如何处理 node.js/express 中的相对路径?

javascript - 如何使用 Node 将 JavaScript 文件解析为对象

javascript - Angular 全栈 + CORS : XMLHttpRequest cannot load

reactjs - Mern heroku 当我重新加载页面时出现内部服务器错误