swagger-egg
swagger-egg copied to clipboard
路由信息解析不出来
因为 swagger-egg 是自己用正则解析 app/router.ts
文件内容,获取路由信息。
参考 node_modules/swagger-egg/lib/router_loader.js 中的 getRouter() 方法。
导致很多情况解析不出来,比如
- 使用
egg-router-plus
- 使用 `'router-name'``
-
'path-match'
不是字符串字面量,而是一个表达式或变量
router.verb('path-match', app.controller.action);
router.verb('router-name', 'path-match', app.controller.action);
router.verb('path-match', middleware1, ..., middlewareN, app.controller.action);
router.verb('router-name', 'path-match', middleware1, ..., middlewareN, app.controller.action);
因为 swagger-egg 是自己用正则解析
app/router.ts
文件内容,获取路由信息。 参考 node_modules/swagger-egg/lib/router_loader.js 中的 getRouter() 方法。导致很多情况解析不出来,比如
- 使用
egg-router-plus
- 使用 `'router-name'``
'path-match'
不是字符串字面量,而是一个表达式或变量router.verb('path-match', app.controller.action); router.verb('router-name', 'path-match', app.controller.action); router.verb('path-match', middleware1, ..., middlewareN, app.controller.action); router.verb('router-name', 'path-match', middleware1, ..., middlewareN, app.controller.action);
确实会有这个限制,目前router只支持官方文档的写法。插件之所以满足不了的根本原因是从app.router中拿不到controller对应的方法名称,只能得到函数。拿不到函数名称就找不到对应的swagger接口注释了。
能拿到函数的话,函数对象的 name
属性可以解决这个问题吗?
能拿到函数的话,函数对象的
name
属性可以解决这个问题吗?能拿到controller的文件名和函数名就可以不用去扫描router文件了。装饰器的写法就不会出现这个问题,因为装饰器是直接在controller文件读取的路由信息。
@JsonMa 装饰器的写法?我看 README.md 里没介绍有,目前支持了吗?