Javascript Express中间件被多次调用
我的中间件被多次呼叫,我不知道为什么。 这是一段非常短的代码,非常令人沮丧,因为我刚刚开始学习express和node。 我不明白为什么它会进入第二个中间件,我没有使用Javascript Express中间件被多次调用,javascript,node.js,express,middleware,Javascript,Node.js,Express,Middleware,我的中间件被多次呼叫,我不知道为什么。 这是一段非常短的代码,非常令人沮丧,因为我刚刚开始学习express和node。 我不明白为什么它会进入第二个中间件,我没有使用next(),而是使用res.send() 我正在学习一门在线课程,它的代码与描述的代码相同。我也搜索了stackoverflow,但没有任何帮助。 我确实读到了一些关于favicon的东西,第二次称之为favicon,但我不明白为什么这会被多次称为favicon const express=require(“express”);
next()
,而是使用res.send()
我正在学习一门在线课程,它的代码与描述的代码相同。我也搜索了stackoverflow,但没有任何帮助。
我确实读到了一些关于favicon的东西,第二次称之为favicon,但我不明白为什么这会被多次称为favicon
const express=require(“express”);
常量app=express();
应用程序使用(“/”,(请求、恢复、下一步)=>{
log(“它总是运行!”);
next();
});
应用程序使用(“/添加产品)”,(请求、回复、下一步)=>{
log(“在第一个中间件中!”);
res.send(“添加产品”);
});
应用程序使用(“/”,(请求、恢复、下一步)=>{
log(“在第二个中间件中!”);
res.send(“快递你好!”);
});
app.listen(3000);
如果我打开localhost:3000/添加产品
我应该进入控制台:
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会自动执行所有的中间件一次吗?我在第一个应用程序之前添加了此代码。use()
调用:
app.get(“/favicon.ico)”,(请求,res)=>res.status(204));
现在我明白了
This always runs!
In first middleware!
This always runs!
In first Middleware!
我还是得到了两次
编辑:
这似乎只发生在chrome中 不要使用
app。对于主要用于中间件注册的路由,请使用,您要使用路由器
app.(post | get | delete | put)(“路由”,函数(req,res,next){})
在您的情况下,最好查看您的浏览器是否正在请求2个http调用。如果是这样的话,它会加倍。问题解决了:我重新安装了Chrome,现在它可以正常工作了。谢谢大家 浏览器正在发送传真请求。在chrome上按F12,您将看到两个请求。其中一个是本地主机,另一个是favicon.ico。因此,您将看到两组console.log()打印到控制台
你不需要重新安装chrome,只需右键点击favicon.ico并点击Block request URL,就可以阻止浏览器发送favicon.ico请求。对于favicon,你可以使用服务favicon
,你的代码在我的代码上运行良好,因为我在第一个应用之前添加了此代码。use()调用:app.get(“/favicon.ico”,(req,res)=>res.status(204));现在我得到了“这总是运行!在第一个中间件中!这总是运行!在第一个中间件中!”我仍然得到了两次。这是我正在学习的一门最新课程,它是这样描述的-我几个小时前刚开始学习,它似乎对其他人都适用。嗯,看看浏览器上的网络请求(chrome上的F12)然后在“网络”选项卡下查看。查看向node.js服务器发出了多少请求。@MarioHess此答案正确app.use(“/”,…)
将被调用,以处理由于其工作方式而未被早期注册的中间件处理的每个请求。如果您只想对路径请求作出响应,那么应该使用类似于app.get(“/”,…)
的方法,这只是一个请求@Andrei这个问题似乎只发生在chrome上!你知道怎么解决这个问题吗?