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 的一部分才能像那样使用它
我在我的控制器中注入了一个提供程序(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 的一部分才能像那样使用它