我有一个 SecretsService,它从不同的服务器获取秘密(私钥)并将其缓存在其中。它有两个功能:
get() 函数期望 fetchSecrets 已成功调用。调用此 fetchSecrets() 函数的最佳位置是什么,以防止 Nest js 服务器在没有收到此函数响应的情况下启动。
到目前为止我已经尝试过:
1.我尝试过像这样使用异步调用它,但现在我是创建该服务实例的人,因此当NestJs尝试创建该服务的实例时,该服务无法访问该服务对象中缓存的秘密实例,
async function bootstrap() {
await new SecretsService().fetchSecrets();
const app = await NestFactory.create<NestExpressApplication>(AppModule);
....
}
Run Code Online (Sandbox Code Playgroud)
2.我在模块导入中添加了useFactory,这样效果很好,但问题是有很多模块依赖于secretsManager服务,我必须像这样导入每个模块。
@Module({
imports: [
FirebaseAdminModule.forRootAsync({
imports: [SecretsManagerModule],
inject: [SecretsManagerService],
useFactory: async (secretsManagerService: SecretsManagerService) => {
await secretsManagerService.fetchSecrets();
return {
credential: admin.credential.cert({
projectId: secretsService.get('GOOGLE_CLOUD_PROJECT'),
clientEmail: secretsService.get('CLIENT_EMAIL'),
privateKey: secretsService.get('PRIVATE_KEY').replace(/\\n/g, '\n'),
}),
};
},
}),
],
providers: [...services],
exports: [...services],
})
export class CoreModule {}
Run Code Online (Sandbox Code Playgroud)
我的问题- 有什么方法可以放置我的 SecretsManager.fetchSecrets() ,以便 Nest js 在从 API 获取响应后引导所有内容,并且在实际引导 AppModule 时可以将缓存的响应(相同的服务实例)注入到模块中。
非常感谢!
| 归档时间: |
|
| 查看次数: |
618 次 |
| 最近记录: |