我目前正在Express JS
从头开始学习。我的目标是精通Node
and 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] 删除。
我来说两句