我创建了一个用于剪切 Proto 文件(服务器)的微服务。我有模块和服务来调用它。
现在在我的(客户端)中,我想在应用程序启动后立即调用该微服务。我已经在我的 app.module 文件中使用了 onApplicationBootstrap() 。但这不起作用,因为我在其他模块中使用 onModule init 作为 grpc 客户端配置。有什么方法可以在任何其他模块之前运行它?(需要在任何模块之前调用我的 CallProtoService 一次)
这是我的模块代码
import { Module, OnModuleInit } from "@nestjs/common";
import { GrpcProtoModule } from "../grpcProto/grpcProto.module";
import { GrpcProtoService } from "../grpcProto/grpcProto.service";
@Module({
imports: [GrpcProtoModule],
// providers: [CallProtoService],
// exports: [CallProtoService],
})
export class CallProtoModule implements OnModuleInit {
constructor(private readonly grpcProtoService: GrpcProtoService) { }
async onModuleInit() {
const markupTrainGrpcProto = {
packageName: 'markupTrainGrpc',
};
const gensecgrpcProto = {
packageName: 'gensecgrpc',
};
await this.grpcProtoService.getProto(gensecgrpcProto);
await this.grpcProtoService.getProto(markupTrainGrpcProto);
}
}
终于找到解决办法了。我将此代码添加到我的 main.ts 文件中。
async function bootstrap() {
//this line will CallProtoModule before AppModule created.
await NestFactory.createApplicationContext(CallProtoModule);
const app = await NestFactory.create(AppModule, {
logger: WinstonModule.createLogger({
instance: instance,
}),
});
希望这对其他人有帮助。