NestJS 使用来自 ConfigService 的配置注入 Dropox 实例

NestJS inject Dropox instantion with config from ConfigService

我有我的文件服务,我想为我的应用程序添加 Dropbox 文件存储。

我想从另一个文件(或在服务中声明一次)注入或类似的东西。问题是如何注入该文件 configService 以获得需要进行实例化的 accessToken

filesService.ts

@Injectable()
export class FilesService {
  constructor(
    private fileRepo: FilesRepo,
    private usersRepo: UsersRepo,
    private configService: ConfigService,
  ){
    // const dbx = new Dropbox({ accessToken: this.configService.get('DROPBOX_TOKEN') })
    // this.dbx = new Dropbox({ accessToken: this.configService.get('DROPBOX_TOKEN') })
  } 
  //private dbx = new Dropbox({ accessToken: this.configService.get('DROPBOX_TOKEN') })

我想声明一次,而不是在每个需要它的服务功能中。

files.module.ts

@Module({
  imports: [
    TypeOrmModule.forFeature([FilesRepo,UsersRepo]),
    MulterModule.register({
      dest: './filesTemp',
    }),
    ConfigModule,
  ],
  providers: [FilesService],
  exports: [FilesService],
  controllers: [FilesController]
})
export class FilesModule {}

您可以创建一个自定义提供程序,例如

{
  provide: 'DropboxService',
  inject: [ConfigService],
  useFactory: (config: ConfigService) => {
    return new Dropbox({ accessToken: config.get('DROPBOX_TOKEN') });
  }
}

现在在您的 FileService 中,您使用 @Inject('DropboxService') private readonly dropbox: Dropbox) 注入创建的实例。