NestJS使用fs.unlink删除文件报错Cannot read property 'unlink' of undefined如何解决
NestJS项目调用Node.js fs模块报错解决方案
问题复现
在NestJS项目中使用fs模块执行文件删除操作,初始代码如下:
import fs from 'fs'; // 其他业务逻辑省略 @Delete(':fileName') async deleteFile(@Param('fileName') fileName: string) { await fs.unlink(`../../uploads/${fileName}`, (err) => { if (err) { console.error(err); return err; } }); }
运行代码后抛出如下错误:
Cannot read property 'unlink' of undefined
问题根因
Node.js内置的fs模块是CommonJS规范的模块,没有提供默认导出(default export),使用import fs from 'fs'默认导入的写法拿到的fs对象为undefined,调用其下的方法自然会抛出属性不存在的错误。
解决方案
修改fs模块的导入语句,使用命名空间导入所有导出成员即可:
import * as fs from 'fs';
补充优化建议
当前代码中使用的fs.unlink是回调风格的API,搭配await使用不会生效,建议改用Promise版本的API,写法更简洁,也能匹配async/await的异步写法:
import * as fs from 'fs/promises'; // 方法内部写法 async deleteFile(@Param('fileName') fileName: string) { try { await fs.unlink(`../../uploads/${fileName}`); } catch (err) { console.error(err); throw err; } }
内容的提问来源于stack exchange,提问作者Charlie Martinez
相关产品推荐
相关产品推荐

