SuperEVO

Results 15 comments of SuperEVO

现在的顺序与路由注册顺序一致,因为 koa-router 在多路由匹配的情况下会使用第一条匹配路由,比如: ```ts class Controller { @route('/:x') b() {} @route('/a') a() {} } ``` 会匹配到 b(),而不是精确匹配,所以注册前在 controller 内部的方法会做一次排序,将参数、通配符后置。 这个的顺序会用来做什么?我再看下怎么解决。

- controller 间根据文件加载顺序(一般系统是字母序) - controller 内多个 route 会做简单排序,将同级参数、通配符后置 https://github.com/zhang740/egg-controller/blob/HEAD/lib/register.ts#L12-L35

> 看到好像有了,支持把Body 直接映射成一个对象吗 这个暂时没有

想法不错,不过还是感觉从 TypeScript 代码出发比较自然,声明式编程为主,校验 & 增强信息部分可以融合 class-validator 这种方案。 目前我这里的实践,返回值类型可以通过 TypeScript 编译插件解析类型信息,生成对应的 OAS 3.0 数据,后续计划将入参一并处理,生成 OAS 不需要手写代码,缺点是需要在编译时做处理,添加插件。 https://github.com/zhang740/egg-controller/tree/master/lib/transformer

@vfasky 在 lib/transformer/ttsc.js ,可以配合 ttypescript 配置到编译插件,目前以支持解析入参,简单的方式,使用 ttypescript 的 ttsc 替代 tsc,在 tsconfig.json 中配置 plugins: ```json { "compilerOptions": { ... "plugins": [ { "transform": "egg-controller/lib/transformer/ttsc.js" } ] } } ```

validateMetaInfo 的数据是对齐 https://github.com/node-modules/parameter 这个库的,其实可以使用 OAS3 的定义来替代,用 schemas 那个属性,手写或者通过这个模块内的 ts 编译插件

这里是一个 feature,推荐先换成 TerserPlugin,后续看下是否可以下掉 generator 的支持

对于手写来说跟 validateMetaInfo 能力差不多,paramSchema 会考虑配合TS解析入参类型来做 目前支持的是函数返回值解析,入参解析还要等等

@vagusX 你这个需求好办 可以参照 [param.ts](https://github.com/zhang740/egg-controller/blob/master/lib/middleware/param.ts) 写个中间件 [RouteType](https://github.com/zhang740/egg-controller/blob/master/lib/type.ts#L70) 上有获取的类型信息,你可以获取到类型然后实例化,然后再把参数对应赋值再validate,你可以试试,等有空给你写个demo