UNPKG

route-path-match

Version:

compile route path template, match route path params

87 lines (75 loc) 2.23 kB
# route-path-match - 路由路径匹配 #### 安装 ```shell npm i -D route-path-match # or pnpm add -D route-path-match ``` ## 路径匹配示例 ```js import { parsePathTpl, matchPathParams } from "route-path-match"; const pathMatcher = parsePathTpl("/:group/:id"); const params = matchPathParams(pathMatcher, "/items/aaa"); if (params) { console.log("path matched", params); // params -> { group: 'items', id: 'aaa' } } else { console.log("path unmatch"); } ``` #### 路径模板规则 - 通配符: - 匿名通配符: 形似 * 与 ** 前者匹配除/之外的字符,后者匹配任意字符,可以通过 *<\\d+> 的形式自定义正则 - 具名通配符: 形似 :id 与 ::id 可捕获变量名,其含义和用法同匿名通配符,可以通过 :id<\\d+> 的形式自定义正则 - 变量名:只支持使用驼峰形式,形如 :groupId - 适配正则: - 继承正则: ( ) 与 ? 等3个字符为正则的含义及用法,即分组与可选 - 自定义通配符正则: id<[0-9]+|all> 其中 < > 字符会被替换为 ( ) 其中包裹的内容会被识别为该变量的正则表达式。其中的反斜杠需要转义,如 \\d+ #### 路径模板示例 - /assets/::filePath - /:group/:id - /:group/:id<[0-9]+> - /:group/:id<[0-9]+>(:extname<\\.html|\\.xml>)? - /:group/:id? - /:group(/:id)? - /:group<items|users|images>(/:id)? ## 路由匹配示例 ```js import { ExpressRouter } from "route-path-match/server"; const notFound = async (req, res) => { res.end('not found') } const resolvePage = async (req, res) => { res.end('some page html') } const initDb = async (req, res) => { req.db = 'some db connection' } const routes = [ { method: 'OPTIONS', path: '*', response: '' }, { path: '/pages/1', handler: [ initDb, resolvePage ] }, { path: *, handler: notFound } ]; const router = new ExpressRouter(routes); import express from 'express' const app = express() const hookTasks = { onRoute: (route, req, res) => {}, onError: (err, req, res) => { console.error(err) }, onFinish: (req, res) => {}, onStart: (req, res) => {}, onEnd: (req, res) => {}, } app.use((req, res) => router.handle(hookTasks, req, res)) app.listen(8080) ```