nodejs mkdir エラーレポート

PHPz
リリース: 2023-05-11 12:59:08
オリジナル
1268 人が閲覧しました

最近、Node.js を使用しているときに、mkdir エラーの問題が発生しました。 fs.mkdir() メソッドを使用して新しいディレクトリを作成しようとすると、システムは次のエラー メッセージをスローしました。

Error: ENOENT: no such file or directory, mkdir 'path/to/new/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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート