一、Express路径包含三种表达形式,分别为字符串、字符串模式、正则表达式
注意:path的匹配都是从端口后的/开始截取,然后匹配的
比如http://127.0.0.1/xxx/xxx-options/xxxx 截取字符串“/xxx/xxx-options/xxxx”进行匹配
所以app.all等等传参的path部分必须在最开始加上/,不然不会匹配上
1、all,get,post的path匹配
(1)字符串:字符串需要完全相等,才能匹配上。
const express = require("express");
const app = express();
app.all("/acb", (req, res) => {
res.send("xxx是个女的");
});
注意:匹配到一个,后面的路由都不会匹配了,除非写了next(),就会往后匹配
(2)字符串模式:
注意:字符串模式的*不是正则的*,表达是n(n>=0)个字符
(3)正则表达式:
图片里截取的路由为“/xxx/xxx-options/xxxx”
const express = require("express");
const app = express();
//只要截取的路由里面有options字符串
app.all(/options/, (req, res) => {
res.send("xxx是个女的");
});
//截取的路由要以options结尾
app.all(/options$/, (req, res) => {
res.send("xxx是个女的");
});
//截取的路由要以/options结尾
app.all(/\/options$/, (req, res) => {
res.send("xxx是个女的");
});
//截取的路由只能是/options
app.all(/^\/options$/, (req, res) => {
res.send("xxx是个女的");
});
2、use的path匹配。
use可以用来嵌套路由,所以use的匹配比较特殊
(1)没传嵌套路由的时候,模糊匹配,传了,就是精确的匹配
(2)use用正则的时候,前面必须要有\/,不然一个都匹配不上,而且最后相当于默认带了个$。
(1)没传嵌套路由
字符串和字符串模式:
只看前缀/birds,后面不管是啥都匹配上了
app.use('/birds', (req, res,)=>{
res.send("xxx是个女的");
})
正则表达式:
app.use(/\/options?/, (req, res,)=>{
res.send("xxx是个女的");
})
use用正则的时候,前面必须要有\/,不然一个都匹配不上,而且最后相当于默认带了个$。
(2)后面传了一个嵌套的路由 ,必须完全匹配上
const express = require("express");
var router = express.Router()
// middleware that is specific to this router
router.use(function timeLog (req, res, next) {
console.log('Time: ', Date.now())
next()
})
// define the home page route
router.get('/', function (req, res) {
res.send('Birds home page')
})
// define the about route
router.get('/about', function (req, res) {
res.send('About birds')
})
const app = express();
app.use('/birds', router)
二、其他
参考文章:
Express路由_express 路由链式写法-CSDN博客
总结:
1、all、get、post
截取出来的字符串都需要精确匹配到path(path有字符串、字符串模式、正则三种形式)
2、use
(1)没有嵌套路由的时候,截取出来的字符串模糊匹配,从开头开始匹配,匹配紧跟着端口后的/.../之间的一截就行了
如:http://127.0.0.1/birds/about 匹配/birds就行
(2)有嵌套路由的时候,需要精确匹配全部url
(3)use用正则的时候,前面必须要有\/,不然一个都匹配不上,而且最后相当于默认带了个$。