Javascript 在控制器nestjs中注入一个简单类

Javascript 在控制器nestjs中注入一个简单类,javascript,node.js,dependency-injection,nestjs,interceptor,Javascript,Node.js,Dependency Injection,Nestjs,Interceptor,所以基本上我有一个控制器,它使用了一个decorator'UseInterceptor',因为我传递了一个调用方法的类,但是我觉得我没有按照应该的方式做。我需要有人能帮助我定义一种更好的方法来维护控制器类的奇异性 icons.controller.ts var uploadOptions = new InterceptorClass(); ----> This bugs me and ---doesn't feel right way of doing. const filesize =

所以基本上我有一个控制器,它使用了一个decorator'UseInterceptor',因为我传递了一个调用方法的类,但是我觉得我没有按照应该的方式做。我需要有人能帮助我定义一种更好的方法来维护控制器类的奇异性

icons.controller.ts

var uploadOptions = new InterceptorClass(); ----> This bugs me and ---doesn't feel right way of doing.
const filesize = 512 * 512;
const driverFilesize = 512 * 512;

@Controller('icons')

export class IconsController {
    constructor(
        
        private iconsService: IconsService) { }
  @Post('/marker/')
    @UseGuards(CustomAccessGuard)
    @UseRoles({
        resource: ModuleNames.ICONS,
        action: "create",
        possession: "own"
    })
    @UseInterceptors(uploadOptions.uploadInterceptor(filesize)) ----> This is where I am using it.
    async uploadMarkerFile(
        @UploadedFile() file,
        @GetUser() user,
        @FileValidator() validator
    ) {

        let result = await this.iconsService.uploadFile(file, IconEntityType.MARKER, user);
        return new SuccessResponse(true, "Successfully Uploaded", result);
    }
}
file.service.ts 供参考

import { FileInterceptor } from "@nestjs/platform-express"
import { memoryStorage } from 'multer';
import { editFileName, imageFileFilter } from "../icons/utils/file-upload.utils";

export class InterceptorClass {

    constructor() { }

    uploadInterceptor(fileSize: number) {
        const UploadInterceptor = FileInterceptor('file', {
            storage: memoryStorage({
                // destination: './src/assets/marker/icons',
                filename: editFileName
            }),
            fileFilter: imageFileFilter,
            limits: {
                files: 1,
                fileSize: fileSize
            }
        });
        return UploadInterceptor;
    }
}

您只需将
FileInterceptor
decorator包装在您自己的decorator中,然后使用给定的配置对其进行初始化:

// in file custom-file.interceptor.ts

import { editFileName, imageFileFilter } from "../icons/utils/file-upload.utils";

export function CustomFileInterceptor(fileSize) {
    const UploadInterceptor = FileInterceptor('file', {
        storage: memoryStorage({
            // destination: './src/assets/marker/icons',
            filename: editFileName
        }),
        fileFilter: imageFileFilter,
        limits: {
            files: 1,
            fileSize
        }
    });
    return UploadInterceptor;
}
然后您可以这样使用它:

import {CustomFileInterceptor} from "./custom-file.interceptor";
...

@UseInterceptors(CustomFileInterceptor(512))
async uploadMarkerFile(...)

@哈里姆·雷汉:有什么反馈吗?