您的位置:首页 > Web前端 > Node.js

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

2017-09-27 10:47 253 查看
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){

// 显示公共页面
});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  路由 通配符