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){
// 显示公共页面
});
//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){
// 显示公共页面
});
相关文章推荐
- 策略路由以及使用 ip route , ip rule , iptables 配置策略路由实例
- nodejs 全局变量和方法,以及console使用
- struts2的action方法匹配以及通配符的使用
- Nodejs安装使用,以及不错的Nodejs或者JS资料整理
- centOS下安装nodejs小结以及守护进程使用与结束
- nodejs 全局变量和方法,以及console使用
- 关于struts2.5.2 初步学习 遇到的几点改变以及使用通配符调用无效的问题
- centOS下安装nodejs小结以及守护进程使用与结束
- react路由的使用方法以及通过路由如何传参传递私有属性--【基于最新版本的react-router-dom(4.2.2)】
- struts2的action方法匹配以及通配符的使用
- bottle框架学习(一)之安装以及路由的使用
- 玩转nodeJS系列:使用原生API实现简单灵活高效的路由功能(支持nodeJs单机集群),nodeJS本就应该这样轻快
- nodejs 初步使用以及实现文件上传的功能
- 关于使用 nodejs 抓 Rss 数据以及 Rss 正文的注意事项
- centos6.7 route命令使用以及 添加永久路由的方法
- 玩转nodeJS系列:使用原生API实现简单灵活高效的路由功能(支持nodeJs单机集群),nodeJS本就应该这样轻快
- NodeJS使用Express框架设置路由
- 深入了解前端路由的实现机制以及angularjs-route-ui的使用
- Express框架使用以及数据库公共操作类整理(Win7下的NodeJs)
- 在使用vue脚手架之前你必须掌握的:vue的模版以及路由用法