[eggjs/egg]RESTful 风格的 URL 定义中,路由名ctx.routerName重复如何解决?

2025-11-04 528 views
2

RESTful 风格的 URL 定义中,路由名重复如何解决?

遇到问题:在中间件获取路由名时,由于路由同名,无法判断是具体哪个方法执行。

文档地址:https://eggjs.org/zh-cn/basics/router.html

回答

0

ctx.method 不一样。

2

laravel的resource路由名是可以做到直接区分,能否参考一下

0

确实可以改善一下。 @xiaopenggithub 可以来贡献一下吗?

8

改下这里就好了 https://github.com/eggjs/egg-router/blob/f0b29ec34df32ba9d872f6318f4febd2b4ef9359/lib/egg_router.js#L151

@xiaopenggithub laravel 是怎么样的?

0

https://github.com/eggjs/egg-router/blob/f0b29ec34df32ba9d872f6318f4febd2b4ef9359/lib/egg_router.js#L12

这里是有 namePrefix 的,不过那几个没设置,这里如果改的话,就 break 了吧,@fengmk2

5

改下这里就好了 https://github.com/eggjs/egg-router/blob/f0b29ec34df32ba9d872f6318f4febd2b4ef9359/lib/egg_router.js#L151

@xiaopenggithub ~laravel 是怎么样的?~

是这样的,laravel的资源路由是带上方法名,能够独立区分(以前是做php,新入手egg,感觉也很强大)

2

嗯,之前是没有这个的,我这边考虑下是不是提供个 API 或配置,直接改的话会 break change,因为有可能有人这么判断了

8
//config.default.js
    auth: {
      ignore: [
        ctx => ctx.urlMatch('post', '/v1/login'),
        ctx => ctx.urlMatch('get', '/v1/gifshow/qrcode'),
        ctx => ctx.urlMatch('post', '/v1/session'),
        ctx => ctx.urlMatch('post', '/v1/admin'),
        ctx => ctx.urlMatch('put', '/v1/order'),
        ctx => ctx.urlMatch('get', '/v1/courierCompany'),
      ],
      enable: true,
    },

我暂时是这么实现的,urlMatch中去做一下方法和路由的匹配,返回true或者false,后面想把这部分抽出来,写起来不这么麻烦