具有依赖关系的 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
重新添加到 AppModule
的 providers
。它已存在于 AuthModule
中。此外,如果你愿意,你可以在 AuthModule
中绑定中间件,而不是在 AppModule
中,它将具有相同的全局范围。
我在创建具有两个依赖项的中间件时遇到问题(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
重新添加到 AppModule
的 providers
。它已存在于 AuthModule
中。此外,如果你愿意,你可以在 AuthModule
中绑定中间件,而不是在 AppModule
中,它将具有相同的全局范围。