Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Express中间件被多次调用_Javascript_Node.js_Express_Middleware - Fatal编程技术网

Javascript Express中间件被多次调用

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”);

我的中间件被多次呼叫,我不知道为什么。 这是一段非常短的代码,非常令人沮丧,因为我刚刚开始学习express和node。 我不明白为什么它会进入第二个中间件,我没有使用
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上!你知道怎么解决这个问题吗?