我在Nest.js应用程序中使用Fastify而不是Express,我想为Fastify配置日志记录。 ConfigService
提供了用于日志记录的配置(以及许多其他功能)。但是,只有在创建Nest的app
对象之后,服务才可用,但是我必须在创建时提供更早的记录器选项。看起来像这样:
const app = await NestFactory.create<NestFastifyApplication>(
AppModule,
new FastifyAdapter(loggerConfig)
);
const config = app.get('ConfigService') as ConfigService;
如何使用ConfigService向loggerConfig
提供FastifyAdapter
?是否可以通过Fastify延迟记录器设置,或者可以在创建app
之前获得服务?
答案 0 :(得分:1)
因此,我设法通过Nest的应用程序上下文解决了这个问题:
async function bootstrap(): Promise<void> {
const ctx = await NestFactory.createApplicationContext(AppModule);
const config = ctx.get('ConfigService') as ConfigService;
const logger = ctx.get('LoggerService') as LoggerService;
await ctx.close();
const app = await NestFactory.create<NestFastifyApplication>(
AppModule,
new FastifyAdapter({ logger: logger.log })
);
...
}
bootstrap();
但是我觉得它很丑。只需看看:首先,我创建ApplicationContext来获取服务,然后必须关闭它,以使其不占用数据库连接,然后创建使用包含与我先前创建和销毁的服务相同的容器的Application。
理想情况下,将有一种方法可以将ApplicationContext转换为NestFastifyApplication。如果有人知道该怎么做或只是对如何实现有更好的主意-我们欢迎您。我不会很快接受我自己的答案。