我的中间件被多次调用,我不知道为什么。
这是一个非常短的代码,当我刚开始学习Express和Node时,这非常令人沮丧。
我不明白为什么它甚至进入第二种中间件,我没有使用next()
,而是使用res.send()
。
我正在上在线课程,它的代码与描述的相同。我也搜索了stackoverflow,但没有任何帮助。 我确实读过一些有关favicon的信息,但第二次却被调用,但我不知道为什么会多次调用它。
const express = require("express");
const app = express();
app.use("/", (req, res, next) => {
console.log("This always runs!");
next();
});
app.use("/add-product", (req, res, next) => {
console.log("In first middleware!");
res.send("<h1>Add Product</h1>");
});
app.use("/", (req, res, next) => {
console.log("In second middleware!");
res.send("<h1>Hello from express!</h1>");
});
app.listen(3000);
如果我打开localhost:3000/add-product
,我应该进入控制台:
This always runs!
In first middleware!
但是我实际上得到了:
This always runs!
In first middleware!
This always runs!
In second middleware!
This always runs!
In first middleware!
favicon是否可以一次自动执行所有中间件?我在第一次app.use()
调用之前添加了以下代码:
app.get("/favicon.ico", (req, res) => res.status(204));
现在我得到
This always runs!
In first middleware!
This always runs!
In first Middleware!
我还是两次。
编辑编辑编辑:
这似乎仅在Chrome中发生。
答案 0 :(得分:1)
对于要使用路由器的主要用于中间件注册的路由,请不要使用app.use
。 https://expressjs.com/en/4x/api.html#app.use
app.(post|get|delete|put)("route", function(req,res,next){})
根据您的情况,最好查看您的浏览器是否正在请求2个http呼叫。如果是这样,它将翻倍。
答案 1 :(得分:0)
问题已解决:我重新安装了Chrome,现在可以正常使用了。谢谢大家!
答案 2 :(得分:0)