Baru-baru ini, semasa menggunakan Node.js, saya menghadapi masalah ralat mkdir. Apabila saya cuba menggunakan kaedah fs.mkdir() untuk mencipta direktori baharu, sistem melemparkan mesej ralat berikut:
Error: ENOENT: no such file or directory, mkdir 'path/to/new/directory'
Perkara pertama yang saya fikirkan ialah masalah laluan, jadi saya menyemak sama ada laluan betul. Ternyata laluan itu betul, yang membuatkan saya sedikit keliru.
Saya melihat ke sana ke mari melalui kod dan akhirnya menemui masalahnya. Malah, gesaan mesej ralat ini sudah sangat jelas-tiada fail atau direktori sedemikian. Iaitu, ralat ini bukan disebabkan oleh laluan yang salah, tetapi oleh fail atau folder yang tidak wujud.
Masalahnya ialah saya tidak mencipta direktori unggul dalam laluan sebelum menggunakan kaedah mkdir untuk mencipta direktori. Dalam kes ini, kaedah fs.mkdir() hanya mencipta direktori peringkat terakhir dalam laluan, bukan direktori perantaraan.
Contohnya, sebelum mencipta direktori laluan/ke/baru/direktori, direktori laluan/ke/ mesti dibuat dahulu, jika tidak ralat ENOENT akan terhasil.
Untuk menyelesaikan masalah ini, kita hanya perlu menggunakan kaedah fs.mkdirSync() untuk mencipta direktori perantaraan secara rekursif sebelum menggunakan kaedah mkdir. Berikut ialah kod contoh yang dilaksanakan:
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);
Kaedah mkdirSyncR() dalam kod contoh ini boleh mencipta direktori secara rekursif dan menentukan sama ada direktori itu wujud semasa mencipta direktori. Sebelum menggunakan kaedah mkdir() untuk mencipta direktori, kami mula-mula menggunakan bahagian laluan tidak termasuk direktori peringkat terakhir (iaitu, memanggil kaedah path.dirname()) untuk mencipta direktori perantaraan.
Kini, kami berjaya mencipta direktori baharu.
Ringkasan
Apabila menggunakan kaedah mkdir dalam Node.js, jika direktori perantaraan direktori tidak wujud, ralat ENOENT akan berlaku. Untuk menyelesaikan masalah ini, mula-mula kita boleh menggunakan kaedah fs.mkdirSync() untuk mencipta direktori perantaraan secara rekursif dan kemudian menggunakan kaedah fs.mkdir() untuk mencipta direktori baharu.
Atas ialah kandungan terperinci laporan ralat nodejs mkdir. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!