Nestjs,在拦截器中使用dependency injected class的方法时遇到一些问题,无法解决inject

Nestjs, met some problems when using dependency injected class's method in interceptors, inject can't be resolved

我在我的控制器中注入了一个提供程序(FileFilter),我想在拦截器中使用它的过滤方法。

@Controller('file-uploader')
export class FileUploaderController {

    constructor(private fileFilter: FileFilter) {}

    @Post()
    @UseInterceptors(
        FileInterceptor('file', {
            fileFilter: this.fileFilter.filter,
        }))

    uploadFile(@UploadedFile() file) {
        return file;
    }
}

这里是文件过滤器


@Injectable()
export class FileFilter {
    filter(req: any, file: MulterFile, callback: any) {
        if (!file.mimetype.match(ASSESSMENT_FILE_TYPE)) {
            return callback(new HttpException(null, HttpStatus.BAD_REQUEST), false);
        }
        return callback(null, true);
    }

}

当我使用postman请求API时,报错信息如下:

fileFilter: this.fileFilter.filter,
[0]                          ^
[0] TypeError: Cannot read property 'filter' of undefined

但是在 post 方法中,可以使用过滤器,这意味着 FileFilter 被正确注入,那么谁能解释为什么这在拦截器中不起作用?或者这是关于初始化命令之类的?请帮忙。

装饰器有不同的词法 this,它不属于 class,因此 this.fileFilter.filter 未定义,因为 this 没有 属性称为 fileFilter。我相信您需要将 filter 方法保存为函数而不是 class 的一部分才能像那样使用它