仅在第一个 API 调用成功后才引导 Nestjs 服务器

par*_*hiv 5 node.js nestjs

我有一个 SecretsService,它从不同的服务器获取秘密(私钥)并将其缓存在其中。它有两个功能:

  1. 获取秘密()
  2. 获取(键:字符串)

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 时可以将缓存的响应(相同的服务实例)注入到模块中。

非常感谢!