ENOENT,fs.mkdirSync上没有这样的文件或目录

Rub*_*ten 20 node.js

我目前正在启动我的NodeJS应用程序,并且我有以下if语句:

Error: ENOENT, no such file or directory './realworks/objects/'
    at Object.fs.mkdirSync (fs.js:654:18)
    at Object.module.exports.StartScript (/home/nodeusr/huizenier.nl/realworks.js:294:7)
Run Code Online (Sandbox Code Playgroud)

然而,奇怪的是该文件夹已存在,但检查在以下代码段上失败:

if(fs.existsSync(objectPath)) {
    var existingObjects = fs.readdirSync(objectPath);
    existingObjects.forEach(function (objectFile) {
        var object = JSON.parse(fs.readFileSync(objectPath+objectFile));
        actualObjects[object.ObjectCode] = object;
    });
}else{
    fs.mkdirSync(objectPath); // << this is line 294
}
Run Code Online (Sandbox Code Playgroud)

我无法理解no such file or directory在创建目录时如何发生.

Yoa*_*osh 15

如果缺少沿给定路径的任何文件夹,mkdir将抛出ENOENT

有两种可能的解决方案(不使用第三方包装):

  • 递归调用fs.mkdir路径中每个不存在的目录。
  • 使用v10.12中recursive引入的选项:
    fs.mkdir('./path/to/dir', {recursive: true}, err => {})


小智 10

在这里解决 如何使用节点的 fs.mkdirSync 创建完整路径?

NodeJS 10.12.0 版本添加了对 mkdir 和 mkdirSync 的原生支持,以递归方式创建目录,并使用 recursive: true 选项,如下所示:

fs.mkdirSync(targetDir, { recursive: true });
Run Code Online (Sandbox Code Playgroud)

如果你更喜欢 fs Promises API,你可以写

fs.promises.mkdir(targetDir, { recursive: true });
Run Code Online (Sandbox Code Playgroud)


Abh*_*mar 6

当您使用fs.mkdir或时fs.mkdirSync,同时传递类似的路径folder1/folder2/folder3folder1并且folder2必须存在,否则会出现上述错误。