Express 为什么在app.use之后定义的路由在get请求之后不返回任何内容?

Express 为什么在app.use之后定义的路由在get请求之后不返回任何内容?,express,Express,我不熟悉node.js和express.js,正在练习创建服务器的基础知识。我发现如果我在app.get之后编写app.get,那么使用该代码根本不起作用 我试着用谷歌搜索了各种各样的why-app.use-express.js404组合,但什么也没找到 const express=需要“express”; const-app=express; //1添加对所有请求类型进行应答的路由 app.route'/article' .getfunctionreq,res{ res.发送“获取文章”;

我不熟悉node.js和express.js,正在练习创建服务器的基础知识。我发现如果我在app.get之后编写app.get,那么使用该代码根本不起作用

我试着用谷歌搜索了各种各样的why-app.use-express.js404组合,但什么也没找到

const express=需要“express”; const-app=express; //1添加对所有请求类型进行应答的路由 app.route'/article' .getfunctionreq,res{ res.发送“获取文章”; } .postfunctionreq,res{ res.send“添加一篇文章”; } .putfunctionreq,res{ res.send“更新文章”; }; //对根本地主机的请求:3000/ 应用程序获取“/”,函数请求,res{ res.send'My first express http server'; }; //3在路由中使用正则表达式 //回复:蝙蝠车、蝙蝠翼、蝙蝠洞、巴塔朗 app.get/bat/,functionreq,res{ res.send'/bat/'; }; //2为路线使用通配符 //回答:尼曼,蝙蝠侠,超人 app.get'/the*man',functionreq,res{ res.发送“人”; }; //app.get不会返回在此方法调用之外定义的任何内容 app.usefunctionreq,res,next{ res.status404.send抱歉,该路线不存在。祝您愉快:; }; //除非移动到app.use上方,否则此操作无效 应用程序获取'/welcome',函数请求,res{ res.send'Hello welcome to my http server made with express'; }; app.listen3000,函数{ 记录“端口3000上监听的示例应用程序”;
}; 将按照定义的顺序检查路由处理程序的路径匹配

一旦你定义了这个:

app.use(function(req, res, next) {
    res.status(404).send("Sorry, that route doesn't exist. Have a nice day :)");
});
已发送响应,但未调用next,因此不会调用链中的更多路由处理程序

404路由处理程序应该是定义的最后一个路由处理程序。其思想是,如果没有其他路由处理程序处理此请求,那么您必须没有路由处理程序,并且它必须是您应该返回404的路由。但是,您只能知道,如果您将这个路由处理程序放在链的最后一个,并因此将其定义为链的最后一个,那么其他路由处理程序将不会处理这个请求

再解释一下,每次执行app.use、app.post或app.get或该系列中的任何其他操作时,它都会将路由处理程序添加到内部路由数组中,并按照代码运行的顺序将它们添加到该数组中。要注册的第一条路径位于数组的开头,最后一条路径位于数组的末尾

当请求传入时,Express从该数组的开头开始,查找与传入请求的路径和类型匹配的第一个处理程序,并调用该路由处理程序

如果该路由处理程序从不调用next,则不会为该请求调用更多的路由处理程序。完成了。如果该路由处理程序调用next,则Express将继续在数组中查找下一个匹配的路由处理程序

因此,您可以看到您的app.use 404 handler never calls next,因此Express将永远不会继续为该请求寻找更多匹配的路由处理程序,因此在该请求之后声明的路由处理程序将永远不会找到,也永远不会调用