在这个 store 方法的上面,现在用了 @SetMetadata 给这个方法附加了一个叫 roles 的数据,然后设置了一下数据的具体的值。在其它地方你需要重复这样做,我们可以自己定义一个装饰器,这样用起来更方便一些。
在终端 ,执行 nest generate,生成一个 decorator ,名字是 roles, 放在 core/decorators 的下面。
回到项目,找到创建的这个装饰器。
它其实就是一个函数, 函数接收不限个数的参数,返回的值就是 SetMetadata ,这里可以设置一下数据的名字,设置成了 roles, 还有一个参数值, 在上面从 @nestjs/common 里面把 SetMetadata 拿出来。
打开 posts.controller ,找到 store 方法, 这里现在我们可以直接使用刚才自定义的装饰器,@Roles, 给它的值设置成 member。
在客户端, 用 POST 方法请求 posts 地址, 发送请求,请求没有通过 demoRoles 守卫, 在请求里添加一个 x-demo 头部,值是 secret, 再发送一下这个请求, 这回通过了 demoRoles 守卫,成功创建了内容。
现在给这个请求的处理器方法上附加 roles 数据,用的是一个自定义的装饰器。