koa-router内联正则表达式失效报错:Unexpected [ at 11
解决koa-router路由参数内联正则报错问题
问题原因
你使用的旧版内联正则语法:id([0-9]{5}),在新版koa-router(v12+)中已不再兼容。因为新版koa-router依赖的path-to-regexp v6+重构了路由解析规则,原语法会触发解析错误。
解决方案
方案1:使用新版内联正则语法
将原语法的括号替换为尖括号<>,这是path-to-regexp v6+支持的自定义匹配器标准写法:
import Koa from 'koa'; import Router from 'koa-router'; const app = new Koa(); const router = new Router(); router.get('/hello/:id<[0-9]{5}>', (ctx) => { const id = ctx.params.id; console.log(id); ctx.body = `Hello ${id}`; }); app.use(router.routes()); app.listen(3000, () => { console.log('Server is running on port 3000'); });
方案2:通过路由选项单独指定正则
如果不习惯内联语法,可以在路由配置的regexp选项中定义参数的正则规则:
import Koa from 'koa'; import Router from 'koa-router'; const app = new Koa(); const router = new Router(); router.get('/hello/:id', { regexp: { id: /[0-9]{5}/ } }, (ctx) => { const id = ctx.params.id; console.log(id); ctx.body = `Hello ${id}`; }); app.use(router.routes()); app.listen(3000, () => { console.log('Server is running on port 3000'); });
方案3:降级koa-router到兼容旧语法的版本
若想继续使用原写法,可安装koa-router v11.x版本(该版本依赖path-to-regexp v5,支持旧版内联正则):
npm install koa-router@11.0.2
内容的提问来源于stack exchange,提问作者ButteryAvocado
相关产品推荐
相关产品推荐

