【问题标题】:Why am i getting the output twice in the Node console?为什么我在 Node 控制台中得到两次输出?
【发布时间】:2021-01-09 05:22:33
【问题描述】:

我刚开始学习NodeJS,请帮助我理解这一点

const http = require('http');
const express = require('express');

const app = express();

app.use((req, res, next) => {
    console.log('In the Middleware');
    next();
});
app.use((req, res, next) => {
    console.log('In another Middleware');
    res.send('<h1>Hello From Express</h1>');
});

app.listen(3000);

输出是

In the Middleware
In another Middleware
In the Middleware
In another Middleware

预期

In the Middleware
In another Middleware

【问题讨论】:

  • 您如何向您的服务器发出请求?从浏览器?卷曲命令?还有什么?
  • 我在本地服务器上执行此操作:localhost:3000 上的 node app.js
  • @ChetanBatra 我尝试运行它,但没有发现输出有任何问题。
  • 是的,但是直到你真正向服务器发出请求(例如,在浏览器中打开http://localhost:3000),中间件才会执行。你是如何提出这个要求的?
  • 打开开发工具并查看网络选项卡。然后刷新页面。浏览器向您的 URL 发出多少请求?有时浏览器会发出多个请求(例如 CORS 预检请求、获取 favicon.ico 文件的请求等)。另外,尝试运行curl localhost:3000 并查看输出是什么。在这种情况下,您会看到两次文本输出吗?

标签: javascript node.js express mern


【解决方案1】:

我会说这是因为浏览器通常也会请求 favicon.ico,但您可以在开发人员工具的“网络”选项卡中查看。

【讨论】:

    【解决方案2】:

    浏览器通常会向服务器发出多个请求。例如,他们通常会尝试获取favicon.ico 文件。另一个例子是CORS preflight request

    如果您在浏览器中打开developer tools,转到“网络”选项卡,然后刷新您的页面,您将看到浏览器发出的所有请求(您可能需要先选中“禁用缓存”复选框)。如果您看到多个请求,这可能是您看到您的文本被多次记录的原因。

    另一种简单的测试方法是尝试从浏览器以外的客户端向服务器发出请求。例如,从命令行运行:curl http://localhost:3000。该命令应该只向您的服务器发出一个请求。在这种情况下,您是否多次看到您的文本输出?如果不是,则进一步证明您的浏览器正在向您的服务器发出多个请求。

    【讨论】:

    • 除了上面的答案之外,您还可以使用 Postman 代替 curl ,它非常易于使用。它可能是运行这些 Rest API 调用的首选 GUI 工具。理想情况下,您应该使用 Postman 或类似的工具进行测试以保存查询
    猜你喜欢
    • 2017-06-22
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 2014-10-13
    • 1970-01-01
    • 2011-10-06
    • 2022-06-16
    • 1970-01-01
    相关资源
    最近更新 更多