如何在不是nestjs路由的方法上设置装饰器

Posted

技术标签:

【中文标题】如何在不是nestjs路由的方法上设置装饰器【英文标题】:How to set a decorator on a method that is not a nestjs route 【发布时间】:2021-11-28 09:13:25 【问题描述】:

NestJS

你好!我有个问题。我想把装饰器放在一个不是端点的函数上,也就是路由上。

我想做的一个例子:

class Controller 
      
  @Get('/')
    firstMethod() 
    secondMethod()
  
      
  @Decorator()
    secondMethod() 
  

我希望当secondMethod方法被调用时,它会经过Decorator

我该怎么做?谢谢!

用谷歌翻译翻译

【问题讨论】:

这个装饰器是做什么的? 这是一个自定义装饰器。我认为这并不重要,但是这个装饰器实现了角色模型。由于它的特殊性,它应该正是我放的地方。把它放在 firstMethod 之前是行不通的。 我不知道为什么它是否在第一种方法上很重要。你能展示装饰器的实现吗?它可能会有所帮助 应用程序启动时,初始化可用的路由。这个装饰器实现了一个复杂的角色模型。我可以授予或拒绝一个、几个或一组用户访问路由。 我创建了一个入口点,用于根据调用的查询参数集不同的函数来请求不同的数据。里面的每个函数都是一个单独的路由,我的装饰器应该被分配到。 【参考方案1】:

好的,在看到您在 Discord 和 issue you opened 中的对话后,我现在更好地理解了这个请求。简而言之,你不能真的只是调用一个方法并期望嵌套增强器工作。嵌套的@Use*() 装饰器所做的只是设置在路由初始化期间读取的元数据,然后增强器绑定到路由处理程序。由于您尝试使用的方法不是路由处理程序,因此不可能向该路由发送请求并且不必通过增强器,这是因为 Nest 需要在请求时控制请求通过并从请求中出来。这就是系统的设计方式。您可以尝试直接调用增强器,但这很可能会变得复杂而丑陋。

【讨论】:

我放弃了这个想法,想出了另一个可行的选择。我将函数中将请求“重定向”到中间件的所有内容都转移了,中间件根据需要调用的函数来更改路径。结果,更改后的路径到达控制器。对于每个单独的函数,我放置了一个内置的 Get 装饰器,因此,现在我的自定义装饰器可以正常工作。问题解决了!谢谢!

以上是关于如何在不是nestjs路由的方法上设置装饰器的主要内容,如果未能解决你的问题,请参考以下文章

NestJS:如何使用另一个装饰器自动记录@MessagePattern 的输入数据?

@nestjs/swagger:如何在没有 @ApiOkResponse 装饰器的情况下添加架构?

如何使用来自@nestjs/mongoose 的@Prop 装饰器添加嵌套的对象数组

NestJS - 如何使用 @Body() 装饰器访问帖子正文?

NestJS 测试:装饰器不是函数

自制方法装饰器擦除所有元数据,我该如何解决?