1

我在我的 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 提供loggerConfigFastifyAdapter?有没有办法通过 Fastify 延迟记录器的设置,或者在app创建服务之前获取服务?

4

1 回答 1

2

所以,我设法用 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 以从中获取服务,然后我必须关闭它以便它不占用数据库连接,然后创建使用包含我之前创建和销毁的相同服务的容器的应用程序。

理想情况下,有一种方法可以将 ApplicationContext 转换为 NestFastifyApplication。如果有人知道如何做到这一点,或者只是对如何实施有更好的想法 - 欢迎您。我不会很快接受我自己的答案。

于 2019-08-05T11:26:39.327 回答