我在控制器中注入了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已正确注入,那么谁能解释为什么这在拦截器中不起作用?还是这与初始化顺序有关?请帮助。
答案 0 :(得分:0)
装饰器具有另一个不属于该类的词法this
,因此this.fileFilter.filter
未定义,因为this
没有名为fileFilter
的属性。我相信您需要将filter
方法另存为函数,而不是类的一部分才能使用它