近期遇到一个需要使用url重写的场景,要把 /mgwk/ 转换成 /list?list=mgwk 这种形式。
express-urlrewrite使用方法
使用正则表达式重写,重写为 。/i123/items/123
app.use(rewrite(/^\/i(\w+)/, '/items/$1'));
使用路由参数重写,引用可以是命名的或数字的。例如重写为:/foo…bar/commits/foo/to/bar
app.use(rewrite('/:src..:dst', '/commits/$1/to/$2'));
app.use(rewrite('/:src..:dst', '/commits/:src/to/:dst'));
您也可以使用通配符来匹配多个段,例如:*/js/vendor/jquery.js 将变为 /public/assets/js/vendor/jquery.js
app.use(rewrite('/js/*', '/public/assets/js/$1'));
在上面的示例中,原始查询字符串(如果有)保持不变。正则表达式应用于完整的 url,因此也可以修改查询字符串:
app.use(rewrite('/file\\?param=:param', '/file/:param'))
必须对查询字符串分隔符 (?) 进行转义,正则表达式才能正常工作。
同时我注意到“/”是用来分割内容的,如果写成:
router.get("/:list//", rewrite('/list?list=:list'));
那么“/mgwk/”和“/mgwk”都能匹配上,如果只需要匹配“/mgwk/”,则应该写成:
router.get("/:list//", rewrite('/list?list=:list'));