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')),
}]
})