首頁 > web前端 > 前端問答 > nodejs mkdir報錯

nodejs mkdir報錯

PHPz
發布: 2023-05-11 12:59:08
原創
1262 人瀏覽過

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板