3

我的应用实例取决于配置:serviceName在这种情况下

const serviceName = 'authentication-service'
const servicePrefix = `api/${serviceName}`;
const swaggerPrefix = 'swagger';
...
const app = await NestFactory.create<NestFastifyApplication>(
    AppModule,
    new FastifyAdapter({
      requestIdLogLabel: serviceName,
      logger: true,
      ...
    }),
    {
      // logger: ['log']
      logger: process.env.DEV === '1' ? ['log', 'debug', 'error', 'verbose', 'warn'] : ['error', 'warn'],
    });

NestJs 文档使用 app 实例来获取configService单例:

const configService = app.get(ConfigService);
const port = configService.get('PORT');

在实例化我的应用程序之前有什么方法可以获取configService实例?

4

3 回答 3

3

没有。如果你真的需要,你可以自己调用dotenv'sconfig()方法并填充,但仅此而已。process.env从技术上讲,如果你真的想要,你可以创建一个NestFactory.createApplicationContext()调用并ConfigService从那里获取,关闭上下文并使用标准启动应用程序NestFactory.create,但这最终会执行两次 DI 解析,这将是一个非常缓慢的启动

于 2021-03-12T19:45:05.000 回答
0

我有类似的需求(对于 Mikro-ORM 配置文件)。我所做的是创建一个新实例ConfigService

import {ConfigService} from '@nestjs/config'
const configService = new ConfigService

然后我可以configService用来获取端口号:

configService.get<number>('PSQL_PORT', 5432)
于 2021-11-22T18:11:11.597 回答
0

您需要做的是在实际应用程序之前创建一个虚拟应用程序实例。

  const configApp = await NestFactory.create(AppModule);
  let configService = configApp.get(ConfigService);

  const app = await NestFactory.create<NestFastifyApplication>(
    AppModule,
    new FastifyAdapter({
      requestIdLogLabel: serviceName,
      logger: true,
      ...
    }),
    {
      // logger: ['log']
      logger: process.env.DEV === '1' ? ['log', 'debug', 'error', 'verbose', 'warn'] : ['error', 'warn'],
    });
    //...
于 2021-11-24T12:47:02.483 回答