Node.js fs.unlinkSync相对路径失效问题求助
为什么相对路径
../public/uploads/image.jpg无效? 核心原因是Node.js中fs模块的相对路径基准是进程启动目录,不是脚本文件所在目录。
你的项目结构:
- 项目根目录(root)
- public > uploads > image.jpg
- routes > Imagedelete.js
两种路径的实际解析结果
public/uploads/image.jpg能正常工作:
你应该是在项目根目录下启动的Node服务(比如执行node app.js),此时进程的工作目录就是root。这个路径会被解析成root/public/uploads/image.jpg,正好匹配图片的真实位置,所以fs能找到并删除文件。../public/uploads/image.jpg触发错误:
这个路径是假设以routes目录为基准的写法,但Node不会这么解析。它会以进程启动的root目录为基准,把路径解析成root/../public/uploads/image.jpg,也就是跳出项目根目录的/public/uploads/image.jpg,系统找不到这个文件,自然报错。
靠谱的解决办法
如果想基于脚本所在目录来定位文件,用__dirname(当前脚本的绝对目录)配合path.join拼接绝对路径:
const fs = require('fs'); const path = require('path'); const imagePath = path.join(__dirname, '../public/uploads/image.jpg'); fs.unlinkSync(imagePath);
__dirname会返回root/routes,和../public/uploads/image.jpg拼接后,就得到准确的root/public/uploads/image.jpg绝对路径,不管你从哪个目录启动服务,都能精准找到文件。
内容的提问来源于stack exchange,提问作者Ayush Sajwan
相关产品推荐
相关产品推荐

