首頁  >  文章  >  web前端  >  nodejs mkdir報錯

nodejs mkdir報錯

PHPz
PHPz原創
2023-05-11 12:59:081256瀏覽

最近在使用 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn