Ответ 1
Проблема была вызвана forever
запуском приложения по отношению к рабочему каталогу, в который вызывается команда forever start
, а не местоположение точки входа приложения.
В настоящее время я запускаю приложение NodeJS, и у меня есть следующий if-statement:
Error: ENOENT, no such file or directory './realworks/objects/'
at Object.fs.mkdirSync (fs.js:654:18)
at Object.module.exports.StartScript (/home/nodeusr/huizenier.nl/realworks.js:294:7)
Однако странная вещь заключается в том, что папка уже существует, но проверка не выполняется в следующем фрагменте:
if(fs.existsSync(objectPath)) {
var existingObjects = fs.readdirSync(objectPath);
existingObjects.forEach(function (objectFile) {
var object = JSON.parse(fs.readFileSync(objectPath+objectFile));
actualObjects[object.ObjectCode] = object;
});
}else{
fs.mkdirSync(objectPath); // << this is line 294
}
Я не понимаю, как no such file or directory
при СОЗДАНИИ каталога.
Проблема была вызвана forever
запуском приложения по отношению к рабочему каталогу, в который вызывается команда forever start
, а не местоположение точки входа приложения.
Если какая-либо папка по указанному пути отсутствует, mkdir
выдаст ENOENT
.
Есть 2 возможных решения (без использования сторонних пакетов):
fs.mkdir
для каждого несуществующего каталога по пути.recursive
опцию, представленную в v10.12: fs.mkdir('./path/to/dir', {recursive: true}, err => {})
Следующие работали для меня:
fs.mkdir( __dirname + '/realworks/', err => {})
Когда вы используете fs.mkdir
или fs.mkdirSync
, при прохождении пути вроде folder1/folder2/folder3
, folder1
и folder2
должны существовать, в противном случае вы получите вышеуказанную ошибку.
Пытаться:
fs.mkdir('./realworks/', err => {})
Причина ошибки заключается в том, что если какая-либо из папок существует по пути, указанному в fs.mkdir или fs.mkdirSync, эти методы будут вызывать/обратный вызов с ошибкой ENOENT.
Решите здесь Как создать полный путь с помощью узла fs.mkdirSync?
В NodeJS версии 10.12.0 добавлена встроенная поддержка mkdir и mkdirSync для рекурсивного создания каталога с опцией recursive: true, как показано ниже:
fs.mkdirSync(targetDir, { recursive: true });
И если вы предпочитаете fs Promises API, вы можете написать
fs.promises.mkdir(targetDir, { recursive: true });