2

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 {}

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

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

2 回答 2

2

正确答案:

ServeStaticModule.forRootAsync({
      inject: [ConfigService],
      useFactory: (configService: ConfigService) => [{
          rootPath: join(__dirname, '..', configService.get<string>('STATIC_FOLDER')),
      }]
})
于 2021-03-19T21:55:29.287 回答
0

即使没有记录,您也可以使用forRootAsync,NestJS 模块通常具有此版本,它允许您注入依赖项和/或进行异步配置:

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

作为参考,在GitHub 源代码中找到它

于 2020-04-28T01:06:07.047 回答