Code enoent что это

Причина ошибки 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 следующей командой

Рис.1. Консоль команд NodeJS
В результате получите ошибку, сообщающую, что файл не найден.
Почему так? Для вас очевидно, что раз файлы находятся в одной директории, то путь можно не указывать. Но для выполняющей среды известен только путь, который запустился по умолчанию. Для пользователей Windows это будет «c:\Users\имя_пользователя». И работа будет проходить с этой директорией, а не с другой.
Есть как минимум 2 решения проблемы.
Решение 1. Перед запуском js файла перейти в ту директорию, где он сохранен, с помощью команды «cd c:\Sites\APISite\«
Тогда запуск приложения будет осуществляться так (Рис.2):

Рис.2. Смена директории и запуск скрипта в NodeJS
Решение 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); >);
Такой код можно запускать из любой директории.
Ошибка npm code ENOENT no such file or directory
При запуске npm ищет файл с именем package.json . В этом файле описан проект, его зависимости и прочая конфигурация. Ищется этот файл только в текущей директории, в которой выполнена команда.
Судя по логу, вы выполняете команду npm start в директории /home/zhanelya , то есть в домашней директории вашего пользователя. Почти наверняка ваш проект находится не там. Найдите директорию проекта и перейдите в неё ( cd path/to/dir ), либо откройте консоль сразу в ней.
Отслеживать
ответ дан 5 июл 2017 в 9:00
Nick Volynkin ♦ Nick Volynkin
34k 25 25 золотых знаков 130 130 серебряных знаков 222 222 бронзовых знака
- reactjs
- npm
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.3.2953
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Ошибка «npm WARN enoent ENOENT: no such file or directory, open ‘C:\Users\Nuwanst\package.json’» (РЕШЕНО)
При попытке установить любой пакет командой npm install может возникать ошибка, связанная с отсутствием файла package.json.
Далее приведён пример ошибки на Windows, но эта проблема может возникнуть как на Windows, так и на Linux. Показанные решения также подходят для обеих платформ.
Nodejs – это лёгкая и эффективная платформа JavaScript, которая построена на основе движка Chrome V8 JavaScript, а NPM – это стандартный менеджер пакетов в NodeJS. Вы можете использовать их для построения масштабируемых сетевых приложений.
Пример вывода при попытке установки пакета с помощью npm:
C:\Users\Nuwanst\Documents\NodeJS\3.chat>npm install socket.io C:\Users\Nuwanst `-- socket.io@2.0.3 npm WARN enoent ENOENT: no such file or directory, open 'C:\Users\Nuwanst\package.json' npm WARN Nuwanst No description npm WARN Nuwanst No repository field. npm WARN Nuwanst No README data npm WARN Nuwanst No license field.
Вариантов решения может быть несколько. Если уже есть файл package-lock.json, то удалите его и попробуйте вновь выполнить установку пакета командой npm.
Ещё один вариант — выполните следующую команду:
npm init
Другой вариант ошибки:
**npm WARN tar ENOENT: no such file or directory. **
может быть связан с правами доступа к текущей папке. Для исправления выполните команду:
sudo chown -R $USER:$USER *
sudo chmod -R 777 *
Коды ошибок — JS: Обработка ошибок
Подход, при котором мы возвращаем либо false , либо данные, подразумевает, что у нас есть два состояния. Но это не всегда так.
Например, если мы возвращаем ошибку файловой системы, то обычно хотим знать, что за ошибка произошла. Например, в файловых системах в UNIXO количество ошибок превышает 100:
#define EPERM 1 /* Operation not permitted */ #define ENOENT 2 /* No such file or directory */ #define ESRCH 3 /* No such process */ #define EINTR 4 /* Interrupted system call */ #define EIO 5 /* I/O error */ #define ENXIO 6 /* No such device or address */ #define E2BIG 7 /* Arg list too long */ #define ENOEXEC 8 /* Exec format error */ #define EBADF 9 /* Bad file number */ #define ECHILD 10 /* No child processes */
Самостоятельно пытаться догадаться, что произошло, — не лучшая идея. Так мы не сможем далеко продвинуться при работе с программой.
В этом случае появляется вопрос, как действовать — как возвращать результат. Один из самых простых вариантов — это коды возврата.
Коды возврата
Возврат ошибки связан с тем, что мы возвращаем не просто false или undefined . Мы возвращаем некоторое число. Оно говорит о том, какая ошибка произошла. Это работает так:
// Вызываем команду, например, удаление директории, и получаем результат const result = files.rmdir(path); // Проверяем, является ли результат частью списка ошибок. Перечисляем возможные варианты if ([/* errors list */].includes(result)) // error > else // success >
В итоге мы узнаем, входит ли результат в список ошибок. Если всё хорошо, то мы продолжаем работать и используем тот же результат.
Проблема в том, что результат иногда может быть числовым. Тогда нам нужно выбрать лист ошибок, чтобы нормальное значение не попадало в него.
В итоге нам постоянно придется делать такие проверки — проверять большое количество возможных возвратов. Такой процесс нужно упрощать.
Возврат результата в СИ
В Си принят следующий подход возврата результата:
#include #include extern int errno; int main () FILE * fp; # Открываем файл на чтение fp = fopen("filedoesnotexist.txt", "rb"); # Делаем проверку if (fp == NULL) // Value of errno is: 2 # Если указатель равен нулю, то пишем, что произошла ошибка fprintf(stderr, "Value of errno: %d\n", errno); > else fclose (fp); > return 0; >
Ошибка записывается в глобальную переменную, которая называется errno . И там, например, будет цифра 2 , которая означает, что всё плохо.
Здесь мы убеждаемся, что у нас нет адекватного результата. Но по сути идет глобальное изменение среды. А глобальные переменные — это не вариант, особенно, в современных языках.
Возврат результата в Golang
Рассмотрим более продвинутый способ. Этот тот же способ, что и в СИ, но улучшенный. Он называется Golang Style.
Golang — это современный язык, который избавляет от глобальных переменных.
package main import ( "fmt" "io" "io/ioutil" ) func main() // Возращается два значения: dat — данные, err — ошибка dat, err := ioutil.ReadFile("/tmp/dat") // Проверяем, равна ли ошибка nil if err != nil fmt.Println(err.Error()) > fmt.Print(string(dat)) >
Если ошибка не равна nil , то ошибки нет, и всё хорошо. Если равна nil , то мы обрабатываем ее.
Это фактически такой же подход как в CИ. Только здесь нет глобальной переменной, которая постоянно меняется. Каждая функция возвращает свой результат выполнения. Так мы двигаемся вниз по вызовам и можем строить программу.
Возврат результата в JavaScript
В JavaScript можно использовать такой же подход. Это рабочая схема, которая основана на Destructuring. У нее есть определенные недостатки, которые мы разберем в следующем уроке.
// Делаем чтение, описываем данные и ошибку const [data, err] = files.readFileSync('/unknown'); if (err === null) // do something with data > else // handle error > // return [null, errors.code.ENOENT];
Если ошибка равна null , то делаем все что хотим, если нет, то обрабатываем ошибку.
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях: