egg icon indicating copy to clipboard operation
egg copied to clipboard

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

Open xiaopenggithub opened this issue 6 years ago • 8 comments

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

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

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

xiaopenggithub avatar Jan 18 '20 16:01 xiaopenggithub

ctx.method 不一样。

atian25 avatar Jan 18 '20 16:01 atian25

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

xiaopenggithub avatar Jan 18 '20 16:01 xiaopenggithub

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

fengmk2 avatar Jan 19 '20 02:01 fengmk2

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

@xiaopenggithub ~~laravel 是怎么样的?~~

image

atian25 avatar Jan 21 '20 06:01 atian25

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

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

atian25 avatar Jan 21 '20 06:01 atian25

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

@xiaopenggithub ~laravel 是怎么样的?~

image

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

xiaopenggithub avatar Jan 21 '20 10:01 xiaopenggithub

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

atian25 avatar Jan 21 '20 11:01 atian25

//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,后面想把这部分抽出来,写起来不这么麻烦

du0wen avatar Apr 07 '20 02:04 du0wen