如何在NestJS中将configService值注入到FilesInterceptor?

问题描述 投票:0回答:1

嗨,我想编写 API 来使用 @UseInterceptors 上传文件。我无法在其中注入 configService 值。下面是我的示例代码,

  constructor(
    configService: ConfigService,
  ) {}

  @Post('product/image/:brandNo')
  @UseInterceptors(
    FilesInterceptor('files', 2, {
      storage: diskStorage({
        destination: (req, file, cb) => {
          const brandNo = req.params.brandNo;
          const directory = `../${this.configService.get('BASE_PATH_FILE')}/${brandNo}/product/image`;
          if (!fs.existsSync(directory)) {
            fs.mkdirSync(directory, { recursive: true });
          }
          cb(null, directory);
        },
        filename: function (req, file, callback) {
          callback(null, file.originalname);
        },
      }),
    }),
  )

从代码中可以看出,

${this.configService.get('BASE_PATH_FILE')}

不在这里工作。我该如何注射?

node.js nestjs nest
1个回答
0
投票

无法在 TS 装饰器中使用

this
!但在技术上可以将
configService
注入装饰器内部。 您可以检查:https://stackoverflow.com/a/60608920/10208733

试试这个:

import { Inject } from '@nestjs/common';

export const destinationFunc = (req, file, cb) => {
  const configService = Inject(ConfigService);
  const brandNo = req.params.brandNo;
  
  const directory = `../${configService.get('BASE_PATH_FILE')}/${brandNo}/product/image`;
  if (!fs.existsSync(directory)) {
    fs.mkdirSync(directory, { recursive: true });
  }
  cb(null, directory);
}


@UseInterceptors(
  FilesInterceptor('files', 2, {
    storage: diskStorage({
      destination: destinationFunc,
      filename: function (req, file, callback) {
        callback(null, file.originalname);
      },
    }),
  }),
)

© www.soinside.com 2019 - 2024. All rights reserved.