代码之家  ›  专栏  ›  技术社区  ›  Forseti

延迟将记录器选项传递到嵌套中的FastfyAdapter。js

  •  0
  • Forseti  · 技术社区  · 6 年前

    在我的窝里,我用Fastfy代替Express。js应用程序,我想为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延迟记录器的设置,或者有没有办法提前获得服务 应用程序 创造了什么?

    0 回复  |  直到 6 年前
        1
  •  3
  •   Forseti    6 年前

    因此,我设法用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。如果有人知道怎么做,或者只是对如何实施有更好的想法,欢迎你。我不会很快接受自己的答案。

    推荐文章