视频教程
nest new custom-decorator -p pnpm
pnpm start:dev
在Nestjs 中我们使用了大量装饰器 decorator ,所以Nestjs 也允许我们去自定义装饰器。
1. 自定义方法装饰器
nest g decorator aaa --flat
它生产的代码,这个就是Aaa就是我们自定义的装饰器
不知道大家还记不记得我们之前讲过的@SetMetadata,我们快速的回顾一下
nest g guard aaa --flat --no-spec
上面就是我们通过nest提供的@SetMetadata装饰器,实现的角色控制守卫,但是不同 metadata 有不同的业务场景,有的是用于权限的,有的是用于其他场景的,这时候就可以在封装一层
我们修改下aaa.decorator
在使用我们写的这个装饰器
效果和之前一样
可以看到我们这里装饰太多了 ,那我们是不是可以自定义个装饰器,把他们整合到一起?
nest g d bbb --flat
效果也是和之前的一致
2. 自定义参数装饰器
nest g d ccc --flat
data 是传入的参数。 ExecutionContext 前面讲过,可以取出 request、response 对象。
参数装饰器的返回值就是参数的值
我们已经明白了nest中怎么定制参数装饰器了,那我们来实现一个它内置的参数装饰器-@Query
我们先复制一下刚刚的ccc.decorator改名为query.decorator,并修改如下
当然,你还可以使用pipe做参数验证和转换
3. 自定义类装饰器
类装饰器和方法装饰器的定义方式一样,比如: