express的路由匹配规则

一、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用正则的时候,前面必须要有\/,不然一个都匹配不上,而且最后相当于默认带了个$。

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值