koa-touter 路由

编程

koa-touter 路由

正则表达式

koa-router 支持正则,在 JavaScript 中,正则表达式,并不是以字符串形式存在,正则是一个 JavaScript 对象,所以,在传递时,不能以 字符串混用。

一、参数

koa-router 和许多路由组件一样,支持传递参数,如以下示例

1
2
router = require('koa-router')();
router.get("/:user/:data", index);

在处理时,可这样获取参数

1
2
3
var user = ctx.params.user;
var data = ctx.params.data;

二、正则

这样

1
2
router = require('koa-router')();
router.get(/^\/blog\/\d{4}-\d{2}-\d{2}\/?$/i, index);

将匹配到形如

/blog/2022-03-06 这样的 path

三、参数 + 正则

有时候,需要使用正则匹配,同时,需要访问 路径 作为参数。

你 当然可以自己进行字符串的解析操作。不过,假若路由可将参数与正则合并,岂不是更好

koa-router 可以数组传递表达式,支持如下操作

在正则中定义匹配组:在一个正则表达式中 使用 “()” 括起来的内容称一个匹配组

在添加路由时,

1
2
router = require('koa-router')();
router.get(["/blog/:year-:month-:day",/^\/blog\/(\d{4})-(\d{2})-(\d{2})\/?$/i], index);

匹配时,会尝试将后面的匹配组与前面的参数进行配对匹配,所以,在处理方法中,可这样处理参数

1
2
3
4
var index = async (ctx, next) => {
const {year, month, day} = ctx.params;
ctx.body = `<p>year: ${year} month: ${month} day: ${day}</p>`
}

image-20220306131508050image-20220306131508050

结果测试

image-20220306130354558image-20220306130354558

NOTE:

假若 后面 的参数比 前面 匹配到的参数少,例如,您写了这样的表达式

1
2
router = require('koa-router')();
router.get(["/blog/:year-:month-:day",/^\/blog\/(\d{4})-(\d{2})\/?$/i], index);

在进行参数匹配时,将多出一个参数,此时,如再通过 ctx.params.参数名 这样的方式,将无法取得参数值,在控制台打印 ctx.params 对象,即可知道原因。

在正常匹配时,ctx.params 如下

1
{ year: '2022', month: '03', day: '08' }

在参数不足时将以数组索引

Author: 哒琳

Permalink: http://blog.jieis.cn/2022/7a5ddeed-1f38-4ad2-9095-6f2974645c82.html

Comments