gpt4 book ai didi

javascript - Express.js : Interesting result

转载 作者:太空宇宙 更新时间:2023-11-04 02:33:24 26 4
gpt4 key购买 nike

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

在尝试在线一些示例时,我遇到了这个有趣的场景。我正在构建简单的http 服务器。代码如下。

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() 路由定义的顺序?

最佳答案

路由按照您定义的方式排序。 "*" 路由捕获所有 url,对吗?因此,当 Express 收到 url 时,它会迭代所有路由,并调用第一个满足条件的路由。这就是为什么你的第二条路线没有被调用。通常 "*" 路由留到最后。这也是 ASP.NET MVC 路由的工作原理。

编辑:与其他路由不同,"/" 路由仅捕获 http://url/ url。

关于javascript - Express.js : Interesting result,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24669288/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com