最近在使用 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报错的详细内容,更多请关注Work网其它相关文章!

09-18 07:45