最近在使用 Node.js 的过程中,我遇到了一个 mkdir 报错的问题。当我尝试使用 fs.mkdir() 方法来创建一个新的目录时,系统抛出了以下错误信息:
Error: ENOENT: no such file or directory, mkdir 'path/to/new/directory'
我第一时间想到的是路径问题,于是检查了一遍路径是否正确。结果我发现路径是正确的,这使我有些犯愁。
我来回查看代码,终于发现了问题所在。其实这个错误信息的提示已经很明显了——no such file or directory。也就是说,这个错误不是由于路径不正确所引起的,而是由于文件或文件夹不存在。
问题出在我使用 mkdir 方法创建目录之前没有先创建路径中的上级目录。在这种情况下,fs.mkdir() 方法只会创建路径中最后一级目录,而不会创建中间的目录。
例如,在创建 path/to/new/directory 目录之前,必须先创建 path/to/ 目录,否则就会导致 ENOENT 错误。
为了解决这个问题,我们只需要在使用 mkdir 方法之前先使用 fs.mkdirSync() 方法来递归创建中间目录。下面是一个实现的示例代码:
const fs = require('fs'); const path = require('path'); function mkdirSyncR(targetDir) { const sep = path.sep; const initDir = path.isAbsolute(targetDir) ? sep : ''; targetDir.split(sep).reduce((parentDir, childDir) => { const curDir = path.resolve(parentDir, childDir); try { if (!fs.existsSync(curDir)) { fs.mkdirSync(curDir); } } catch (err) { if (err.code !== 'EEXIST') { throw err; } } return curDir; }, initDir); } const newDir = 'path/to/new/directory'; mkdirSyncR(path.dirname(newDir)); fs.mkdirSync(newDir);
这个示例代码中的 mkdirSyncR() 方法可以递归地创建目录,并且在创建目录的时候判断了目录是否存在的情况。在使用 mkdir() 方法创建目录之前,我们先使用路径中去除最后一级目录的部分(即调用 path.dirname() 方法)来创建中间目录。
现在,我们就可以顺利地创建新目录了。
总结
在 Node.js 中使用 mkdir 方法时,如果目录的中间目录不存在,就会出现 ENOENT 错误。为了解决这个问题,我们可以先使用 fs.mkdirSync() 方法递归地创建中间目录,再使用 fs.mkdir() 方法创建新目录。
以上是nodejs mkdir报错的详细内容。更多信息请关注PHP中文网其他相关文章!