【问题标题】:How to use multiple global interceptors in NestJS如何在 NestJS 中使用多个全局拦截器
【发布时间】:2021-08-08 08:09:03
【问题描述】:

我已经知道我们可以通过以下代码创建全局拦截器:

import { Module } from '@nestjs/common';
import { APP_INTERCEPTOR } from '@nestjs/core';

@Module({
  providers: [
    {
      provide: APP_INTERCEPTOR,
      useClass: LoggingInterceptor,
    },
  ],
})
export class AppModule {}

来源:documentation

但是,如果我想说,UserInterceptor.
UserInterceptor 将从数据库中获取用户并转换请求。
UserInterceptor 需要注入让说UserService。 我想在全球范围内使用UserInterceptor

@Injectable()
export class UserInterceptor {
  constructor(private readonly service: UserService) {}
}

documentation,我们不能做app.useGlobalInterceptors(new UserInterceptor()),因为UserInterceptor在构造函数(UserService)中需要1个参数。

由于我们使用APP_INTERCEPTOR 代替LoggingInterceptor,我没有找到另一种方法来为APP_INTERCEPTOR 分配另一个值以在全局范围内使用拦截器。
例如,我认为如果我们可以这样做,问题就会解决:

providers: [
  {
    provide: APP_INTERCEPTOR,
    useClass: [LoggingInterceptor, UserInterceptor]
  }
]

【问题讨论】:

    标签: http web nestjs interceptor


    【解决方案1】:
    providers: [
      {
        provide: APP_INTERCEPTOR,
        useClass: LoggingInterceptor
      },
      {
        provide: APP_INTERCEPTOR,
        useClass: UserInterceptor
      }
    ]
    

    就这样

    【讨论】:

    • 哇!这真的很简单。有人可以向我解释这是如何工作的吗?或者在哪里可以找到它是如何工作的?我从来没有这样想,因为我认为 APP_INTERCEPTOR 简而言之只能分配给一个实例。
    • 快速解释如何:Nest 正在监视这些 APP_* 提供程序,并最终将 uuid 附加到令牌,以便您可以为单个提供程序令牌提供多个值。
    • 这在某处有记录吗?我还没有找到 here 它,我正要在 SO 上问同样的问题。
    • @FlavienVolken 不,我只是通过阅读源代码来弄清楚。
    猜你喜欢
    • 2020-12-16
    • 2019-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-03
    • 2020-12-12
    • 2020-06-29
    • 2021-07-15
    相关资源
    最近更新 更多