如何在不是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 装饰器添加嵌套的对象数组