如何将路径配置从另一个服务注入到ServeStaticModule中?

JBC*_*BCP 4 dependency-injection solid-principles nestjs nestjs-config

NestJS 文档说要像这样提供静态文件:

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 {}
Run Code Online (Sandbox Code Playgroud)

但作为一名 DI 和 SOLID 从业者,我想让 rootPath 可配置。可以说我有一个ConfigModule或我自己的ConstantsModule。我如何rootPath以类似的方式注入?

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

Ale*_*ksa 6

正确答案:

ServeStaticModule.forRootAsync({
      inject: [ConfigService],
      useFactory: (configService: ConfigService) => [{
          rootPath: join(__dirname, '..', configService.get<string>('STATIC_FOLDER')),
      }]
})
Run Code Online (Sandbox Code Playgroud)