Причина ошибки Error: ENOENT, open 'c:\Path\file.name' в NodeJS – это отсутствие файла указанного файла. Очень легко его воспроизвести на примере по работе с файловой системой 'fs'.
1. Сохраните файл example_log.txt с произвольным текстовым содержимым в директории C:\Sites\APISite\
2. Сохраните в файле js.js приведенный ниже код:
var fs = require('fs'); fs.readFile('example_log.txt', function (err, logData) { // If an error occurred, throwing it will // display the exception and end our app. if (err) throw err; // logData is a Buffer, convert to string. var text = logData.toString(); console.log(text); });
3. Запустите его из командной строки NodeJS следующей командой
node c:\Sites\APISite\js.js
В результате получите ошибку, сообщающую, что файл не найден.
Почему так? Для вас очевидно, что раз файлы находятся в одной директории, то путь можно не указывать. Но для выполняющей среды известен только путь, который запустился по умолчанию. Для пользователей Windows это будет "c:\Users\имя_пользователя". И работа будет проходить с этой директорией, а не с другой.
Есть как минимум 2 решения проблемы.
Решение 1. Перед запуском js файла перейти в ту директорию, где он сохранен, с помощью команды "cd c:\Sites\APISite\"
Тогда запуск приложения будет осуществляться так (Рис.2):
node js.js
Решение 2. В коде файла js.js указать полный путь к открываемому файлу. Для NodeJS в Windows нужно указать путь так:
fs.readFile('c:/Sites/APISite/example_log.txt', function (err, logData)
var fs = require('fs'); fs.readFile('c:/Sites/APISite/example_log.txt', function (err, logData) { // If an error occurred, throwing it will // display the exception and end our app. if (err) throw err; // logData is a Buffer, convert to string. var text = logData.toString(); console.log(text); });
Такой код можно запускать из любой директории.