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