JavaScript中对象方法无法访问构造函数内属性的报错问题
解决NestJS中FileInterceptor无法访问类成员logger的问题
问题根源在于你在fileFilter中使用了普通函数声明,这里的this指向的是multer的配置对象,而非Test类的实例,所以找不到logger属性,触发TypeError: Cannot read properties of undefined (reading 'logger')错误。
直接用箭头函数替换普通函数即可解决,箭头函数会继承外层上下文的this(也就是Test类的实例):
export class Test { constructor( private readonly logger: PinoLogger, ) {} @Put('test') @UseInterceptors( FileInterceptor('file', { storage: multer.diskStorage({ destination: '/uploads', filename: (req: any, file: any, cb: any) => { cb(null, req.body.filename); }, }), // 换成箭头函数,this会指向Test类实例 fileFilter: (req, file, cb) => { this.logger.info(`Test log`); // 必须调用cb来完成文件过滤逻辑,否则请求会挂起 // 允许文件上传调用cb(null, true),拒绝则调用cb(null, false)或cb(new Error('错误信息')) cb(null, true); }, }), ) // 需补充路由处理方法 uploadFile() { // 业务逻辑 } }
另外注意:原代码里的fileFilter没有调用cb,这会导致请求一直处于挂起状态,一定要补充cb的调用逻辑。
内容的提问来源于stack exchange,提问作者saravanan mp
相关产品推荐
相关产品推荐

