nodejs 在路由中使用通配符以及转交控制权

来源:互联网 发布:自学编程从入门到精通 编辑:程序博客网 时间:2024/05/17 08:35
var express = require('express');
//var app = express.createServer(); //该方法已被删除


var app = express();


app.get('/a*', function(req,res) {
console.log(req.params[0]) //获取参数
res.send('a');
// 匹配 /afoo /a.bar /a/qux 等
});


app.get('/a*/c*d', function(req,res) {
res.send('b');
// 匹配 /b/cd /b/cfood /b//c/d/ 等
// 不匹配 /b/c/d/foo
});
app.get('*', function(req, res) {
res.send('*');
// 匹配 /a /c /b/cd /b/c/d /b/c/d/foo
// 不匹配 /afoo /bfoo/cbard
});

app.listen(9001);


当使用通配符来构建路由时, 两个通配符之间的标记必须匹配, 除非它是可选的。通配符通常用在包含(.)的文件名中。 还需要注意的是, 与许多其他正则表达式语言不同,*表示的不是零个以上字符, 它表示的是一个以上字符。 一个斜杠(/) 在匹配通配符的时候可以认为是一个字符。
另外需要注意的是, 路由是按顺序执行的。 当多个路由同时匹配上提供的
URL 时,只有第一个匹配的路由会执行相关的动作, 也就是说, 如何安排路由的顺序是很重要的。 在前面的例子里, 即便通配符能够匹配所有的URL, 它也只能捕获前面的路由未能匹配的URL

例如:http://127.0.0.1:9001/a/cdsd 既匹配第一个,也匹配第二个,但是同时app.get的时候,只会执行第一个

有时候, 你会希望同一个 URL 在不同的情景下匹配上多个路由。 我们已经看到了路由定义的顺序会决定哪个路由被选中使用。 但是, 当某些条件不满足的时候, 依然有办法可以把控制权传给下一个路由, 这在许多情况下会很有用。 如下:

app.get('/users/:id', function(req, res, next){
var id = req.params.id;
if (checkPermission(id)) {
//
显示个人页面
} else {
next(); //我们对路由的处理函数增加了一个新的参数,next 参数会通知路由中间件去调用下一个路由
}
});
app.get('/users/:id', function(req, res){
//
显示公共页面
});