Nestjs,在拦截器中使用依赖注入类的方法时遇到了一些问题,无法解决注入问题

时间:2019-12-16 14:53:28

标签: dependency-injection interceptor nestjs

我在控制器中注入了provider(FileFilter),我想在Interceptors中使用其filter方法。

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

    constructor(private fileFilter: FileFilter) {}

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

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

这是FileFilter


@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);
    }

}

当我使用邮差请求API时,错误消息如下:

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

但在post方法内部,可以使用过滤器,这意味着FileFilter已正确注入,那么谁能解释为什么这在拦截器中不起作用?还是这与初始化顺序有关?请帮助。

1 个答案:

答案 0 :(得分:0)

装饰器具有另一个不属于该类的词法this,因此this.fileFilter.filter未定义,因为this没有名为fileFilter的属性。我相信您需要将filter方法另存为函数,而不是类的一部分才能使用它