node.js - 具有依赖项的 Nestjs 中间件
问题描述
我无法创建具有两个依赖项(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
'sproviders
中。它已经存在于AuthModule
. 此外,您可以将中间件绑定在AuthModule
if 中而不是在中,AppModule
并且它将具有相同的全局范围。
推荐阅读
- c++ - 模板函数的#pragma 链接
- java - 在春季设置 GOOGLE_APPLICATION_CREDENTIALS
- javascript - 如何在 Safari 中使用 .animate javascript?获得未定义不是一个函数
- python - 如何只打印前 300 个字符?
- javascript - Random number generation/shuffling issue
- tensorflow - 在 Tensorflow 中重新训练先前训练的模型
- python - 在python中的特定时间运行函数
- android - 停止后片段活跃起来
- c++ - c++ 从 char* 函数中存储 char 列表
- javascript - 构造函数在 p5 js 中无法正常工作