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

NestJS

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

我想做的一个例子:

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

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

我该怎么做?谢谢!

用谷歌翻译翻译

【问题讨论】:

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

标签: typescript nestjs decorator


【解决方案1】:

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

【讨论】:

  • 我放弃了这个想法,想出了另一个可行的选择。我将函数中将请求“重定向”到中间件的所有内容都转移了,中间件根据需要调用的函数来更改路径。结果,更改后的路径到达控制器。对于每个单独的函数,我放置了一个内置的 Get 装饰器,因此,现在我的自定义装饰器可以正常工作。问题解决了!谢谢!
猜你喜欢
  • 2020-11-21
  • 2022-01-03
  • 2021-01-20
  • 2021-10-25
  • 2019-08-05
  • 2018-07-27
  • 2023-02-16
  • 2014-04-20
  • 2022-09-29
相关资源
最近更新 更多