midway
midway copied to clipboard
validate能否作为全局配置而不必在每个controller方法上添加装饰器?
- Node Version: v14.15.4
- Egg Version:x
- Plugin Name:x
- Plugin Version:x
- Platform:windows10
- Mini Showcase Repository:x
validate能否作为全局配置而不必在每个controller方法上添加装饰器?
另外,获取客户端输入时,例如调用@Body(),如果不传入property,返回的是undefined,能否改为返回整个输入对象?毕竟在controller中绝大部分情况都是要获取整个对象,每次调用都要传入一个All似乎有些多此一举了
这里的原理是: 通过装饰器,ts的装饰器加上后,能允许代码能获取到函数的参数类型,然后我们再去拿参数的类型上面的校验逻辑。
如果是全局,就无法得到这次请求的参数类型,也就无法去拿校验的规则。
这里的原理是: 通过装饰器,ts的装饰器加上后,能允许代码能获取到函数的参数类型,然后我们再去拿参数的类型上面的校验逻辑。
如果是全局,就无法得到这次请求的参数类型,也就无法去拿校验的规则。
我们在controller添加@Body等参数装饰器的时候已经可以拿到参数类型了, 如果把参数处理放到这边来,全局就只需一个是否开启参数校验的配置,即可省略每个controller方法的@Validate装饰器,让代码简洁一点
本来想加在Get、POST这些装饰器上面加上validate的逻辑,然后需要考虑前后兼容问题。
不过你这个需求,可以理解,不然每次写这个装饰器确实稍微麻烦一些。我后面考虑一下怎么处理一下,让大家代码更精简一些。
可以参考一下 nestjs 中的实现, 注册一个全局管道,在 req 进来的时候 获取参数 装饰器,然后加上校验