1.字符串模式路由路径
1.1“?” 匹配前面字符或子字符串0或1次
//可以访问acd,abcdapp.get('/ab?cd',(req,res)=>{res.send('Hello')
})
1.2 “+” 匹配前面字符或子字符串1或多次
//可以访问abcd,aabcd,等等
app.get('/a+bcd',(req,res)=>{res.send('Hello')
})
1.3 “*” 匹配任意多字符(包括空字符)
//此路径将匹配 abcd、 abxcd、 abRANDOMcd、 ab123cd 等app.get('/ab*cd',(req,res)=>{res.send('Hello')
})
1.4 “()” 子字符串
"()"
的用处把如 ?
和 +
等匹配规则应用到一些字符上
//路径将匹配/abe 和/abcde
app.get('/ab(cd)?e',(req,res)=>{res.send('Hello')
})
1.5 正则表达式匹配
基于正则表达式的路由路径示例:这条路径将匹配任何带有“ a”的路径。
app.get(/a/,(req,res)=>{res.send('Hello')
})
2 路由参数匹配路由路径
2.1基本匹配
路由参数名称只能由 [A-Za-z0-9_] 组成
<---- Route path: /users/:userId/books/:bookId
Request URL: http://localhost:3000/users/34/books/8989
req.params: { "userId": "34", "bookId": "8989" } ---->app.get('/users/:userId/books/:bookId', function (req, res) {res.send(req.params)
})
2.2 “-” 与 “.” 分割路由参数
<--- Route path: /flights/:from-:to
Request URL: http://localhost:3000/flights/LAX-SFO
req.params: { "from": "LAX", "to": "SFO" } ---><--- Route path: /plantae/:genus.:species
Request URL: http://localhost:3000/plantae/Prunus.persica
req.params: { "genus": "Prunus", "species": "persica" } --->
2.3使用正则表达式
- 在 Express 4.x 中,正则表达式中的 * 字符不会按照通常的方式进行解释。作为解决方案,请使用{0,}代替 * 。这个问题很可能在 Express 5中得到解决。
<--- Route path: /user/:userId(\d+)
Request URL: http://localhost:3000/user/42
req.params: {"userId": "42"} --->
3.路由函数
var cb0 = function (req, res, next) {console.log('CB0')next()}var cb1 = function (req, res, next) {console.log('CB1')next()}var cb2 = function (req, res) {res.send('Hello from C!')}app.get('/example/c', [cb0, cb1, cb2])