具有依赖关系的 Nestjs 中间件

Nestjs middleware with dependencies

我在创建具有两个依赖项的中间件时遇到问题(TypeORModule.forFeature([USER]),FirebaseModule)。 我所做的是创建一个如下所示的 AuthModule:

    @Module({
    imports: [
        FirebaseModule,
        TypeOrmModule.forFeature([User])
    ],
    providers: [
        AuthMiddleware
    ],
})

中间件看起来像这样

export class AuthMiddleware implements NestMiddleware {
constructor(
    @InjectRepository(User)
    private usersRepository: Repository<User>,
    private firebaseService: FirebaseService
) {}

async use(req: Request, res: Response, next: () => void) {...}    
}

我的应用模块看起来像这样

@Module({
imports: [
    TypeOrmModule.forRoot({
        ...config.get("database"),
        entities: [__dirname + '/entities/**/*.{js,ts}']
    }),
    AuthModule,
    exampleModule
],
providers: [
    AuthMiddleware
]
})

export class AppModule implements NestModule {
    configure(consumer: MiddlewareConsumer): any {
        consumer.apply(AuthMiddleware).forRoutes("*")
    }
}

我遇到很多错误,我尝试改变一切以使其正常工作,但我就是无法让它发生。我从

得到错误

请确保索引 [0] 处的参数 UserRepository 在模块(有时是 AppModule,有时是 exampleModule)上下文中可用。

如果其他模块(控制器模块,如提供 api 服务)是否也需要导入中间件模块?

一般来说,如何继续实现依赖于外部模块的中间件?它们是否必须是模块以便我可以导入需要的模块?

我需要一些帮助,谢谢!

您不需要将 AuthMiddleware 重新添加到 AppModuleproviders。它已存在于 AuthModule 中。此外,如果你愿意,你可以在 AuthModule 中绑定中间件,而不是在 AppModule 中,它将具有相同的全局范围。