Express.js:有趣的结果

阿迪亚·帕拉卜(AdityaParab)

我目前正在Express JS从头开始学习我的目标是精通Nodeand Express

在网上尝试一些示例时,我遇到了这种有趣的情况。我的建筑很简单http server代码如下。

var express = require("express");
var port = 8080;

var app = express();

app.get("*",function(req,res){
    res.end("Hello World!");
});

app.listen(port,function(){
    console.log("Listening on Port: %s",port);
});

如果我通过点击来运行http://localhost:8080它,它将输出Hello World!完美,很棒。

然后我尝试通过URL此代码传递一些参数

var express = require("express");
var port = 8080;

var app = express();

app.get("/name/:user_name",function(req,res){
    res.status(200);
    res.set('Content-type','text/html');
    res.end("<html><body><h1>Hello "+req.params.user_name+"!!!</h1></body></html>");
});

app.get("*",function(req,res){
    res.end("Hello World!");
});

app.listen(port,function(){
    console.log("Listening on Port: %s",port);
});

然后我通过点击运行它http://localhost/name/Maverick,它输出Hello Maverick!!!太好了,太完美了。

但是,这是有趣的部分,当我切换顺序app.get("*")app.get("/name/:user_name")输出更改时。

例如,如果我将app.js代码更改

var express = require("express");
var port = 8080;

var app = express();

app.get("*",function(req,res){ // <<<<--------- app.get("*") is first in this case
    res.end("Hello World!");
});

app.get("/name/:user_name",function(req,res){
    res.status(200);
    res.set('Content-type','text/html');
    res.end("<html><body><h1>Hello "+req.params.user_name+"!!!</h1></body></html>");
});

app.listen(port,function(){
    console.log("Listening on Port: %s",port);
});

如果我运行它,http://localhost:8080/name/Maverick它将输出Hello World

问题是,app.get()路线的顺序重要吗?

即使我定义了/name/:user_name为什么不被调用的路线

有没有什么方法可以使代码独立于app.get()路由的定义顺序

乔治

定义路线时将对它们进行排序。"*"路线捕获所有网址,对不对?因此,当express收到一个url时,它会迭代所有路由,并且会调用第一个符合条件的路由。这就是为什么您的第二条路线没有被呼叫的原因。通常,该"*"路线留在最后。这也是ASP.NET MVC路由的工作方式。

编辑:"/"路由仅捕获http://url/URL,与另一个不同。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章