Как внедрить конфигурацию пути в ServeStaticModule из другого сервиса? - PullRequest
1 голос
/ 28 апреля 2020

Документация Nest JS сообщает серверу stati c файлы, подобные этим:

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { ServeStaticModule } from '@nestjs/serve-static';
import { join } from 'path';

@Module({
  imports: [
    ServeStaticModule.forRoot({
      rootPath: join(__dirname, '..', 'client'),
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

Но, как практик DI и SOLID, я хочу сделать rootPath настраивается. Допустим, у меня есть ConfigModule или мой собственный ConstantsModule. Как мне ввести rootPath способом, подобным этому?

@Module({
  imports: [
    ServeStaticModule.forRoot({
      rootPath: this.configService.get<string>('staticRootPath'),
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

1 Ответ

0 голосов
/ 28 апреля 2020

Даже если это не задокументировано, вы можете использовать forRootAsync, для модулей Nest JS характерно наличие этой версии, которая позволяет вводить зависимости и / или выполнять асинхронную c настройку:

@Module({
  imports: [
    ServeStaticModule.forRootAsync({
      imports: [ConfigModule],
      injects: [ConfigService],
      useFactory: (configService) => ({
        rootPath: configService.get<string>('staticRootPath')
      })
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

Для справки, нашел его в источниках GitHub

...