fs.mkdir未创建目录也无报错,如何确认目录是否创建成功
问题根因说明
err返回null代表fs模块判定mkdir操作执行成功,看不到目录90%以上的概率是dirPath的实际生成路径和你预期的路径不一致,其次是目录已提前存在(recursive:true模式下目录已存在不会报错)。
确认目录是否创建的方案
- 方案1:在回调中直接校验目录状态
在你现有代码的回调逻辑里新增目录校验逻辑,代码示例如下:
const fs = require("fs-extra"); const path = require("path"); // 先打印你实际传入的路径和进程工作目录,排查路径偏差 console.log("传入的dirPath值:", dirPath); console.log("当前Node进程工作目录:", process.cwd()); console.log("dirPath对应的绝对路径:", path.resolve(dirPath)); fs.mkdir(dirPath, { recursive: true }, (err) => { if (err) { console.log("ERR: When attempting to mkdir", err); } else { // 新增校验逻辑 const isDirExist = fs.existsSync(dirPath) && fs.lstatSync(dirPath).isDirectory(); console.log("MKDIR操作执行成功,目录是否真实存在:", isDirExist); console.log("MKDIR made " + dirPath); } cb(null, dirPath); });
执行后如果输出isDirExist为true,说明目录确实已经创建,你可以到打印出来的绝对路径位置找到对应目录。
- 方案2:固化绝对路径避免路径偏差
如果是相对路径导致的目录找不到问题,建议统一用绝对路径定义dirPath,示例如下:
const path = require("path"); // 示例:在当前JS文件所在目录下创建名为target的子目录 const dirPath = path.resolve(__dirname, "./target");
- 方案3:特殊场景排查
如果校验后isDirExist为false,优先排查以下情况:- 当前运行Node进程的操作系统用户,对
dirPath对应的上级路径有没有写入、创建目录的权限 - 操作系统是否开启了文件隐藏规则,或者安全软件拦截了目录创建操作
- 当前运行Node进程的操作系统用户,对
内容的提问来源于stack exchange,提问作者lowcrawler
相关产品推荐
相关产品推荐

