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

Dependency injection 如何将路径配置从另一个服务注入ServeStaticModule?,dependency-injection,nestjs,solid-principles,nestjs-config,Dependency Injection,Nestjs,Solid Principles,Nestjs Config,服务器上的静态文件如下所示: 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({

服务器上的静态文件如下所示:

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和可靠的实践者,我希望使根路径可配置。假设我有一个或我自己的
ConstantsModule
。如何以类似的方式注入
rootPath

@Module({
  imports: [
    ServeStaticModule.forRoot({
      rootPath: this.configService.get<string>('staticRootPath'),
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}
@模块({
进口:[
ServeStaticModule.forRoot({
rootPath:this.configService.get('staticRootPath'),
}),
],
控制器:[AppController],
提供者:[AppService],
})
导出类AppModule{}

即使没有文档记录,您也可以使用
for rootasync
,这是NestJS模块的典型版本,允许您插入依赖项和/或进行异步配置:

@Module({
  imports: [
    ServeStaticModule.forRootAsync({
      imports: [ConfigModule],
      injects: [ConfigService],
      useFactory: (configService) => ({
        rootPath: configService.get<string>('staticRootPath')
      })
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}
@模块({
进口:[
ServeStaticModule.forRootAsync({
导入:[ConfigModule],
注入:[ConfigService],
useFactory:(配置服务)=>({
根路径:configService.get('staticRootPath')
})
}),
],
控制器:[AppController],
提供者:[AppService],
})
导出类AppModule{}

作为参考,请在

中找到它,即使没有文档记录,您也可以使用
For rootasync
,对于NestJS模块来说,典型的情况是此版本允许您插入依赖项和/或进行异步配置:

@Module({
  imports: [
    ServeStaticModule.forRootAsync({
      imports: [ConfigModule],
      injects: [ConfigService],
      useFactory: (configService) => ({
        rootPath: configService.get<string>('staticRootPath')
      })
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}
@模块({
进口:[
ServeStaticModule.forRootAsync({
导入:[ConfigModule],
注入:[ConfigService],
useFactory:(配置服务)=>({
根路径:configService.get('staticRootPath')
})
}),
],
控制器:[AppController],
提供者:[AppService],
})
导出类AppModule{}
作为参考,请在

中找到正确答案:

ServeStaticModule.forRootAsync({
      inject: [ConfigService],
      useFactory: (configService: ConfigService) => [{
          rootPath: join(__dirname, '..', configService.get<string>('STATIC_FOLDER')),
      }]
})
ServeStaticModule.forRootAsync({
inject:[ConfigService],
useFactory:(configService:configService)=>[{
rootPath:join(uu dirname,…,configService.get('STATIC_FOLDER')),
}]
})
正确答案:

ServeStaticModule.forRootAsync({
      inject: [ConfigService],
      useFactory: (configService: ConfigService) => [{
          rootPath: join(__dirname, '..', configService.get<string>('STATIC_FOLDER')),
      }]
})
ServeStaticModule.forRootAsync({
inject:[ConfigService],
useFactory:(configService:configService)=>[{
rootPath:join(uu dirname,…,configService.get('STATIC_FOLDER')),
}]
})