Spec-Zone.ru › Node.js 8 LTS

Ошибки

Приложения, работающие в Node.js, обычно сталкиваются с четырьмя категориями ошибок:

  • Стандартные ошибки JavaScript, такие как:
    • <EvalError> : возникает при неудачном вызове eval().
    • <SyntaxError> : возникает в ответ на неправильный синтаксис языка JavaScript.
    • <RangeError> : возникает, когда значение не попадает в ожидаемый диапазон.
    • <ReferenceError> : возникает при использовании неопределённых переменных.
    • <TypeError> : возникает при передаче аргументов неправильного типа.
    • <URIError> : возникает при неправильном использовании функций глобального управления URI.
  • Системные ошибки, вызванные ограничениями основной операционной системы, такие как попытка открыть несуществующий файл, попытка отправить данные по закрытому сокету и т. п.;
  • И ошибки, указанные пользователем, вызванные кодом приложения.
  • Ошибки утверждений представляют собой особый класс ошибок, которые могут возникать всякий раз, когда Node.js обнаруживает исключительное нарушение логики, которое никогда не должно происходить. Обычно они поднимаются модулем assert.

Все ошибки JavaScript и системные ошибки, генерируемые Node.js, наследуются от или являются экземплярами стандартного класса JavaScript <Error> и гарантированно предоставляют по крайней мере свойства, доступные в этом классе.

Распространение и перехват ошибок

Node.js поддерживает несколько механизмов для распространения и обработки ошибок, возникающих во время работы приложения. Способ отображения и обработки этих ошибок полностью зависит от типа ошибки и стиля вызываемого API.

Все ошибки JavaScript обрабатываются как исключения, которые немедленно генерируют и выбрасывают ошибку, используя стандартный механизм JavaScript throw. Они обрабатываются с помощью конструкции try / catch, предоставляемой языком JavaScript.

// Throws with a ReferenceError because z is undefined
try {
  const m = 1;
  const n = m + z;
} catch (err) {
  // Handle the error here.
}

Любое использование механизма JavaScript throw вызовет исключение, которое должно быть обработано с помощью try / catch, иначе процесс Node.js немедленно завершится.

За редким исключением, синхронные API (любой блокирующий метод, который не принимает функцию callback, например, fs.readFileSync), будут использовать throw для сообщения об ошибках.

Ошибки, возникающие в рамках асинхронных API, могут быть сообщены несколькими способами:

  • Большинство асинхронных методов, принимающих функцию callback, будут принимать объект Error, переданный в качестве первого аргумента этой функции. Если этот первый аргумент не null и является экземпляром Error, значит произошла ошибка, которую следует обработать.
  const fs = require('fs');
  fs.readFile('a file that does not exist', (err, data) => {
    if (err) {
      console.error('There was an error reading the file!', err);
      return;
    }
    // Otherwise handle the data
  });
  • При вызове асинхронного метода на объекте, являющимся EventEmitter, ошибки могут быть перенаправлены на событие 'error' этого объекта.

    const net = require('net');
    const connection = net.connect('localhost');
    
    // Adding an 'error' event handler to a stream:
    connection.on('error', (err) => {
      // If the connection is reset by the server, or if it can't
      // connect at all, or on any sort of error encountered by
      // the connection, the error will be sent here.
      console.error(err);
    });
    
    connection.pipe(process.stdout);
    
  • Несколько типично асинхронных методов в API Node.js могут по-прежнему использовать механизм throw для поднятия исключений, которые необходимо обработать с помощью try / catch. Нет исчерпывающего списка таких методов; пожалуйста, обратитесь к документации каждого метода, чтобы определить необходимый механизм обработки ошибок.

Использование механизма событий 'error' наиболее распространено для API на основе потоков потоков и генераторов событий, которые сами по себе представляют собой серию асинхронных операций во времени (в отличие от одной операции, которая может пройти успешно или завершиться ошибкой).

Для всех объектов EventEmitter, если обработчик события 'error' не указан, ошибка будет выброшена, заставив процесс Node.js сообщить об необработанном исключении и аварийно завершиться, если не используется модуль domain соответствующим образом или не зарегистрирован обработчик для события process.on('uncaughtException').

const EventEmitter = require('events');
const ee = new EventEmitter();

setImmediate(() => {
  // This will crash the process because no 'error' event
  // handler has been added.
  ee.emit('error', new Error('This will crash'));
});

Ошибки, сгенерированные таким образом, нельзя перехватить с помощью try / catch, поскольку они выбрасываются после выхода вызывающего кода.

Разработчики должны обратиться к документации каждого метода, чтобы точно определить, как распространяются ошибки, которые они генерируют.

Обработчики ошибок с первым аргументом

Большинство асинхронных методов, экспортируемых ядром Node.js, следуют идиоматическому шаблону, называемому обработчиком ошибок с первым аргументом (иногда называемым обработчиком Node.js). В этом шаблоне функция обратного вызова передается методу в качестве аргумента. Когда операция завершается успешно или возникает ошибка, функция обратного вызова вызывается с объектом Error (если он есть) в качестве первого аргумента. Если ошибка не возникла, первый аргумент передаётся как null.

const fs = require('fs');

function errorFirstCallback(err, data) {
  if (err) {
    console.error('There was an error', err);
    return;
  }
  console.log(data);
}

fs.readFile('/some/file/that/does-not-exist', errorFirstCallback);
fs.readFile('/some/file/that/does-exist', errorFirstCallback);

Механизм JavaScript try / catch нельзя использовать для перехвата ошибок, генерируемых асинхронными API. Распространённая ошибка начинающих — попытка использовать throw внутри обработчика с первым аргументом:

// THIS WILL NOT WORK:
const fs = require('fs');

try {
  fs.readFile('/some/file/that/does-not-exist', (err, data) => {
    // mistaken assumption: throwing here...
    if (err) {
      throw err;
    }
  });
} catch (err) {
  // This will not catch the throw!
  console.error(err);
}

Это не сработает, потому что функция обратного вызова, переданная fs.readFile(), вызывается асинхронно. К моменту вызова обратного вызова окружающий код (включая блок try { } catch (err) { }) уже завершится. Выбрасывание ошибки внутри обратного вызова в большинстве случаев может привести к аварийному завершению процесса Node.js. Если включены области доменов или обработчик зарегистрирован для process.on('uncaughtException'), такие ошибки могут быть перехвачены.

Класс: Error

Объект JavaScript Error, который не обозначает конкретных обстоятельств, почему произошла ошибка. Объекты Error捕获一个“堆栈跟踪”,详细说明了代码中创建Error 的位置,并可能提供错误的文本描述。

Только для криптографии, объекты Error будут содержать стек ошибок OpenSSL в отдельном свойстве, называемом opensslErrorStack, если он доступен при возникновении ошибки.

Все ошибки, генерируемые Node.js, включая все системные и JavaScript-ошибки, являются экземплярами или наследуются от класса Error.

new Error(message)

  • message <строка>

Создаёт новый объект Error и устанавливает свойство error.message в предоставленное текстовое сообщение. Если в качестве message передаётся объект, текстовое сообщение генерируется путём вызова message.toString(). Свойство error.stack будет представлять точку в коде, в которой был вызван new Error(). Стек-трейсы зависят от API отслеживания стека V8. Стек-трейсы распространяются только до либо (а) начала синхронного выполнения кода, либо (б) числа фреймов, указанного в свойстве Error.stackTraceLimit, в зависимости от того, что меньше.

Error.captureStackTrace(targetObject[, constructorOpt])

  • targetObject <Объект>
  • constructorOpt <Функция>

Создаёт свойство .stack для targetObject, которое при обращении возвращает строку, представляющую расположение в коде, в котором был вызван Error.captureStackTrace().

const myObject = {};
Error.captureStackTrace(myObject);
myObject.stack;  // similar to `new Error().stack`

Первая строка следа будет иметь префикс ${myObject.name}: ${myObject.message}.

Необязательный аргумент constructorOpt принимает функцию. Если он задан, все фреймы выше constructorOpt, включая constructorOpt, будут опущены из сгенерированного стека вызовов.

Аргумент constructorOpt полезен для скрытия от конечного пользователя деталей реализации генерации ошибок. Например:

function MyError() {
  Error.captureStackTrace(this, MyError);
}

// Without passing MyError to captureStackTrace, the MyError
// frame would show up in the .stack property. By passing
// the constructor, we omit that frame, and retain all frames below it.
new MyError().stack;

Error.stackTraceLimit

  • <число>

Свойство Error.stackTraceLimit определяет количество фреймов стека, собранных при создании стека вызовов (будь то new Error().stack или Error.captureStackTrace(obj)).

Значение по умолчанию — 10, но его можно установить на любое допустимое число JavaScript. Изменения повлияют на все стеки вызовов, созданные после изменения значения.

Если установлено значение, отличное от числа, или отрицательное число, стеки вызовов не будут собирать фреймы.

error.code

  • <строка>

Свойство error.code — строковая метка, которая идентифицирует тип ошибки. Подробности о конкретных кодах см. в Кодах ошибок Node.js.

error.message

  • <строка>

Свойство error.message — строковое описание ошибки, установленное при вызове new Error(message). Переданное в конструктор message также появится в первой строке стека вызовов Error, однако изменение этого свойства после создания объекта Error может не изменить первую строку стека вызовов (например, когда error.stack читается до изменения этого свойства).

const err = new Error('The message');
console.error(err.message);
// Prints: The message

error.stack

  • <строка>

Свойство error.stack — это строка, описывающая точку в коде, в которой был инициализирован Error.

Например:

Error: Things keep happening!
   at /home/gbusey/file.js:525:2
   at Frobnicator.refrobulate (/home/gbusey/business-logic.js:424:21)
   at Actor.<anonymous> (/home/gbusey/actors.js:400:8)
   at increaseSynergy (/home/gbusey/actors.js:701:6)

Первая строка отформатирована как <error class name>: <error message>, и за ней следует ряд кадров стека (каждая строка начинается с «at »). Каждый кадр описывает место вызова в коде, приведшее к возникновению ошибки. V8 пытается отобразить имя каждой функции (по имени переменной, имени функции или имени метода объекта), но иногда не может найти подходящего имени. Если V8 не может определить имя функции, для этого кадра будет отображена только информация о местоположении. В противном случае определённое имя функции будет отображено с добавлением информации о местоположении в скобках.

Кадры генерируются только для JavaScript-функций. Если, например, выполнение синхронно проходит через функцию расширения C++ с именем cheetahify, которая сама вызывает JavaScript-функцию, кадр, представляющий вызов cheetahify, не будет присутствовать в трассировках стека:

const cheetahify = require('./native-binding.node');

function makeFaster() {
  // cheetahify *synchronously* calls speedy.
  cheetahify(function speedy() {
    throw new Error('oh no!');
  });
}

makeFaster();
// will throw:
//   /home/gbusey/file.js:6
//       throw new Error('oh no!');
//           ^
//   Error: oh no!
//       at speedy (/home/gbusey/file.js:6:11)
//       at makeFaster (/home/gbusey/file.js:5:3)
//       at Object.<anonymous> (/home/gbusey/file.js:10:1)
//       at Module._compile (module.js:456:26)
//       at Object.Module._extensions..js (module.js:474:10)
//       at Module.load (module.js:356:32)
//       at Function.Module._load (module.js:312:12)
//       at Function.Module.runMain (module.js:497:10)
//       at startup (node.js:119:16)
//       at node.js:906:3

Информация о местоположении будет одной из:

  • native, если кадр представляет вызов внутри V8 (как в [].forEach).
  • plain-filename.js:line:column, если кадр представляет вызов внутри Node.js.
  • /absolute/path/to/file.js:line:column, если кадр представляет вызов в пользовательской программе или её зависимостях.

Строка, представляющая трассировку стека, генерируется лениво, когда свойство error.stack обращается.

Количество кадров, захваченных трассировкой стека, ограничено меньшим значением из Error.stackTraceLimit или числа доступных кадров в текущем тике цикла событий.

Ошибки системного уровня генерируются как расширенные экземпляры Error , которые подробно описаны здесь.

Класс: AssertionError

Подкласс Error, указывающий на сбой утверждения. Такие ошибки обычно указывают на неравенство фактического и ожидаемого значения.

Например:

assert.strictEqual(1, 2);
// AssertionError [ERR_ASSERTION]: 1 === 2

Класс: RangeError

Подкласс Error, указывающий на то, что предоставленный аргумент не находится в наборе или диапазоне допустимых значений для функции; будь то числовой диапазон или выход за пределы набора вариантов для данного параметра функции.

Например:

require('net').connect(-1);
// throws "RangeError: "port" option should be >= 0 and < 65536: -1"

Node.js будет генерировать и выбрасывать экземпляры RangeError немедленно как форму проверки аргументов.

Класс: ReferenceError

Подкласс Error, указывающий на попытку доступа к переменной, которая не определена. Такие ошибки обычно указывают на опечатки в коде или иную неисправность программы.

Хотя код клиента может генерировать и распространять эти ошибки, на практике это делает только V8.

doesNotExist;
// throws ReferenceError, doesNotExist is not a variable in this program.

Если приложение не генерирует и не выполняет код динамически, экземпляры ReferenceError всегда должны рассматриваться как ошибка в коде или его зависимостях.

Класс: SyntaxError

Подкласс Error, указывающий на то, что программа не является допустимым JavaScript-кодом. Эти ошибки могут быть сгенерированы и распространены только в результате оценки кода. Оценка кода может произойти в результате eval, Function, require, или vm. Эти ошибки почти всегда указывают на неисправность программы.

try {
  require('vm').runInThisContext('binary ! isNotOk');
} catch (err) {
  // err will be a SyntaxError
}

Экземпляры SyntaxError необратимы в контексте, который их создал — они могут быть перехвачены только другими контекстами.

Класс: TypeError

Подкласс Error, указывающий на то, что предоставленный аргумент не является допустимым типом. Например, передача функции в параметр, ожидающий строку, будет считаться TypeError.

require('url').parse(() => { });
// throws TypeError, since it expected a string

Node.js будет генерировать и выбрасывать экземпляры TypeError немедленно как форму проверки аргументов.

Исключения против ошибок

JavaScript-исключение — это значение, которое выбрасывается в результате недопустимой операции или как целевое значение для оператора throw. Хотя не обязательно, чтобы эти значения были экземплярами Error или классов, наследующих от Error, все исключения, выброшенные Node.js или движком JavaScript, будут экземплярами Error.

Некоторые исключения необратимы на уровне JavaScript. Такие исключения всегда приведут к аварийному завершению процесса Node.js. Примеры включают проверки assert() или вызовы abort() на уровне C++.

Системные ошибки

Системные ошибки генерируются при возникновении исключений в среде выполнения программы. Как правило, это операционные ошибки, возникающие при нарушении приложения ограничений операционной системы, таких как попытка чтения несуществующего файла или недостаточных разрешений пользователя.

Системные ошибки обычно генерируются на уровне вызова системных функций: исчерпывающий список кодов ошибок и их значений доступен путём запуска man 2 intro или man 3 errno на большинстве Unix; или онлайн.

В Node.js системные ошибки представлены как расширенные объекты Error с добавленными свойствами.

Класс: System Error

error.code

  • <string>

Свойство error.code — это строка, представляющая код ошибки, которая обычно имеет вид E , за которым следует последовательность заглавных букв.

error.errno

  • <string> | <number>

Свойство error.errno — это число или строка. Число — это отрицательное значение, соответствующее коду ошибки, определённому в libuv Error handling. Подробную информацию см. в заголовочном файле uv-errno.h (deps/uv/include/uv-errno.h в дереве исходного кода Node.js). В случае строки она такая же, как error.code.

error.syscall

  • <string>

Свойство error.syscall — это строка, описывающая системное вызов syscall, который завершился ошибкой.

error.path

  • <string>

Если присутствует (например, в fs или child_process), свойство error.path — это строка, содержащая соответствующий неверный путь.

error.address

  • <string>

Если присутствует (например, в net или dgram), свойство error.address — это строка, описывающая адрес, к которому не удалось подключиться.

error.port

  • <number>

Если присутствует (например, в net или dgram), свойство error.port — это число, представляющее порт подключения, который недоступен.

Общие системные ошибки

Этот список не исчерпывающий, но перечисляет многие распространённые системные ошибки, с которыми можно столкнуться при написании программы Node.js. Полный список можно найти здесь.

  • EACCES (Разрешение на доступ запрещено): Была предпринята попытка получить доступ к файлу способом, запрещённым правами доступа к файлу.

  • EADDRINUSE (Адрес уже используется): Попытка привязать сервер (net, http или https) к локальному адресу завершилась неудачей из-за того, что другой сервер на локальной системе уже использует этот адрес.

  • ECONNREFUSED (Подключение отклонено): Подключение не удалось, так как целевой компьютер его активно отклонил. Это обычно происходит при попытке подключения к сервису, который неактивен на удалённом хосте.

  • ECONNRESET (Подключение прервано удалённой стороной): Подключение было принудительно закрыто удалённой стороной. Обычно это происходит из-за потери подключения на удалённом сокете из-за таймаута или перезагрузки. Часто встречается в модулях http и net.

  • EEXIST (Файл существует): Целевым объектом операции было существующий файл, в то время как операция требовала, чтобы целевой объект не существовал.

  • EISDIR (Это директория): Операция ожидала файл, но заданный путь указал на директорию.

  • EMFILE (Превышено максимальное количество открытых файлов в системе): Достигнуто максимальное количество разрешённых дескрипторов файлов в системе, и запросы на получение ещё одного дескриптора не могут быть удовлетворены, пока не будет закрыт хотя бы один. Это возникает при одновременном открытии многих файлов, особенно на системах (в частности, macOS), где низкий лимит дескрипторов файлов для процессов. Чтобы исправить низкий лимит, запустите ulimit -n 2048 в той же оболочке, в которой будет выполняться процесс Node.js.

  • ENOENT (Файл или директория не найдены): Обычно возникает при операциях с fs для обозначения того, что какой-либо компонент в указанном пути не существует — по заданному пути не удалось найти ни файл, ни директорию.

  • ENOTDIR (Это не директория): Компонент заданного пути существует, но не является ожидаемой директорией. Обычно возникает при fs.readdir.

  • ENOTEMPTY (Директория не пуста): Директория с записями была целевым объектом операции, которая требует пустой директории — обычно fs.unlink.

  • EPERM (Доступ запрещён): Попытка выполнить операцию, требующую повышенных привилегий.

  • EPIPE (Повреждённый канал): Операция записи в канал, сокет или FIFO, для которого нет процесса чтения данных. Обычно встречается на уровнях net и http, указывая, что удалённая сторона потока, в который происходит запись, была закрыта.

  • ETIMEDOUT (Таймаут операции): Запрос подключения или отправки данных завершился неудачей, так как подключенная сторона не ответила должным образом в течение заданного времени. Обычно возникает при http или net — часто указывает на то, что socket.end() не был правильно вызван.

Коды ошибок Node.js

ERR_ARG_NOT_ITERABLE

В качестве аргумента потребовался итерируемый объект (то есть значение, работающее с циклами for...of), но он не был предоставлен в API Node.js.

ERR_ASYNC_CALLBACK

Была предпринята попытка зарегистрировать что-то, что не является функцией, как коллбек-функцию AsyncHooks.

ERR_ASYNC_TYPE

Тип асинхронного ресурса был некорректным. Обратите внимание, что пользователи также могут определять свои типы, если используют публичный API имплементатора.

ERR_ENCODING_INVALID_ENCODED_DATA

Данные, предоставленные в API util.TextDecoder(), были некорректны в соответствии с указанной кодировкой.

ERR_ENCODING_NOT_SUPPORTED

Кодировка, предоставленная в API util.TextDecoder(), не являлась одной из Поддерживаемых кодировок WHATWG.

ERR_FALSY_VALUE_REJECTION

Promise значение, которое было преобразованно в коллбек через util.callbackify(), отклонилось с ложным значением.

ERR_HTTP_HEADERS_SENT

Была предпринята попытка добавить дополнительные заголовки после отправки заголовков.

ERR_HTTP_INVALID_CHAR

В сообщении HTTP-ответа (фразе причины) был обнаружен некорректный символ.

ERR_HTTP_INVALID_STATUS_CODE

Код состояния находился вне обычного диапазона кодов состояния (100-999).

ERR_HTTP_TRAILER_INVALID

Заголовок Trailer был установлен, хотя кодировка передачи не поддерживает это.

ERR_HTTP2_ALREADY_SHUTDOWN

Возникает при нескольких попытках закрытия сессии HTTP/2.

ERR_HTTP2_ALTSVC_INVALID_ORIGIN

Для фреймов HTTP/2 ALTSVC требуется допустимый origin.

ERR_HTTP2_ALTSVC_LENGTH

Фреймы HTTP/2 ALTSVC ограничены максимальным объёмом полезной нагрузки в 16 382 байта.

ERR_HTTP2_CONNECT_AUTHORITY

Для запросов HTTP/2 с использованием метода CONNECT, требуется псевдозаголовок :authority.

ERR_HTTP2_CONNECT_PATH

Для запросов HTTP/2 с использованием метода CONNECT, псевдозаголовок :path запрещён.

ERR_HTTP2_CONNECT_SCHEME

Для запросов HTTP/2 с использованием метода CONNECT, псевдозаголовок :scheme запрещён.

ERR_HTTP2_FRAME_ERROR

Произошла ошибка при отправке отдельного фрейма в сессии HTTP/2.

ERR_HTTP2_GOAWAY_SESSION

После того, как Http2Session получит фрейм GOAWAY от подключённого узла, новые потоки HTTP/2 не могут быть открыты.

ERR_HTTP2_HEADER_REQUIRED

В сообщении HTTP/2 отсутствовал необходимый заголовок.

ERR_HTTP2_HEADER_SINGLE_VALUE

Для поля заголовка HTTP/2 было предоставлено несколько значений, в то время как требовалось только одно.

ERR_HTTP2_HEADERS_AFTER_RESPOND

Дополнительные заголовки были указаны после начала ответа HTTP/2.

ERR_HTTP2_HEADERS_OBJECT

Ожидался объект HTTP/2 заголовков.

ERR_HTTP2_HEADERS_SENT

Была предпринята попытка отправки нескольких заголовков ответа.

ERR_HTTP2_INFO_HEADERS_AFTER_RESPOND

Информационные заголовки HTTP/2 должны быть отправлены до вызова метода Http2Stream.prototype.respond().

ERR_HTTP2_INFO_STATUS_NOT_ALLOWED

Информационные коды HTTP-состояния (1xx) не могут быть установлены в качестве кода состояния ответа для ответов HTTP/2.

ERR_HTTP2_INVALID_CONNECTION_HEADERS

Использование заголовков, специфичных для соединения HTTP/1, запрещено в запросах и ответах HTTP/2.

ERR_HTTP2_INVALID_HEADER_VALUE

Было указано недопустимое значение заголовка HTTP/2.

ERR_HTTP2_INVALID_INFO_STATUS

Указан недопустимый код информационного состояния HTTP. Коды информационных состояний должны быть целыми числами от 100 до 199 (включительно).

ERR_HTTP2_INVALID_ORIGIN

Фреймы HTTP/2 ORIGIN требуют допустимого origin.

ERR_HTTP2_INVALID_PACKED_SETTINGS_LENGTH

Длина входных объектов Buffer и Uint8Array, переданных в API http2.getUnpackedSettings(), должна быть кратной шести.

ERR_HTTP2_INVALID_PSEUDOHEADER

Можно использовать только допустимые псевдозаголовки HTTP/2 (:status, :path, :authority, :scheme, и :method).

ERR_HTTP2_INVALID_SESSION

Для объекта Http2Session была выполнена операция после его уничтожения.

ERR_HTTP2_INVALID_SETTING_VALUE

Указано недопустимое значение для параметра HTTP/2.

ERR_HTTP2_INVALID_STREAM

Была выполнена операция над потоком, который был уже уничтожен.

ERR_HTTP2_MAX_PENDING_SETTINGS_ACK

При отправке фрейма HTTP/2 SETTINGS подключенному узлу, узел должен отправить подтверждение, что он получил и применил новые SETTINGS. По умолчанию может быть отправлено максимальное количество неоповещённых фреймов SETTINGS в любой момент. Этот код ошибки используется, когда достигнут этот предел.

ERR_HTTP2_NESTED_PUSH

Была предпринята попытка инициировать новый поток push изнутри потока push. Вложенные потоки push не допускаются.

ERR_HTTP2_NO_SOCKET_MANIPULATION

Была предпринята попытка напрямую управлять сокетом (чтение, запись, приостановка, возобновление и т. д.), подключенным к Http2Session.

ERR_HTTP2_ORIGIN_LENGTH

Фреймы HTTP/2 ORIGIN ограничены длиной 16 382 байта.

ERR_HTTP2_OUT_OF_STREAMS

Количество потоков, созданных в одной сессии HTTP/2, достигло максимального предела.

ERR_HTTP2_PAYLOAD_FORBIDDEN

Для кода состояния HTTP был указан payload, для которого payload запрещён.

ERR_HTTP2_PING_CANCEL

Запрос HTTP/2 ping был отменён.

ERR_HTTP2_PING_LENGTH

Длина payload запроса HTTP/2 ping должна быть ровно 8 байт.

ERR_HTTP2_PSEUDOHEADER_NOT_ALLOWED

Псевдозаголовок HTTP/2 был использован неправильно. Псевдозаголовки — это имена полей заголовков, начинающиеся с префикса :.

ERR_HTTP2_PUSH_DISABLED

Была предпринята попытка создания потока push, который был отключён клиентом.

ERR_HTTP2_SEND_FILE

Была предпринята попытка использования API Http2Stream.prototype.responseWithFile() для отправки чего-либо, кроме обычного файла.

ERR_HTTP2_SESSION_ERROR

Сессия Http2Session была закрыта с ненулевым кодом ошибки.

ERR_HTTP2_SETTINGS_CANCEL

Настройки Http2Session были отменены.

ERR_HTTP2_SOCKET_BOUND

Была предпринята попытка подключить объект Http2Session к объекту net.Socket или tls.TLSSocket, который уже был привязан к другому объекту Http2Session.

Ошибка ERR_HTTP2_SOCKET_UNBOUND

Была предпринята попытка использовать свойство socket объекта Http2Session, который уже был закрыт.

Ошибка ERR_HTTP2_STATUS_101

Использование информационного кода состояния 101 запрещено в HTTP/2.

Ошибка ERR_HTTP2_STATUS_INVALID

Указан недопустимый код состояния HTTP. Коды состояния должны быть целыми числами между 100 и 599 (включительно).

Ошибка ERR_HTTP2_STREAM_CANCEL

Поток Http2Stream был уничтожен до передачи каких-либо данных подключенному узлу.

Ошибка ERR_HTTP2_STREAM_ERROR

В фрейме RST_STREAM был указан код ошибки, отличный от нуля.

Ошибка ERR_HTTP2_STREAM_SELF_DEPENDENCY

При установке приоритета для потока HTTP/2 поток может быть помечен как зависимость от родительского потока. Этот код ошибки используется, когда поток пытается обозначить себя как зависимость от самого себя.

Ошибка ERR_HTTP2_TRAILERS_ALREADY_SENT

Заголовки-прицепы уже были отправлены по Http2Stream.

Ошибка ERR_HTTP2_TRAILERS_NOT_READY

Метод http2stream.sendTrailers() нельзя вызывать до тех пор, пока событие 'wantTrailers' не будет излучено объектом Http2Stream. Событие 'wantTrailers' будет излучено только в том случае, если для объекта Http2Stream установлен параметр waitForTrailers.

Ошибка ERR_HTTP2_UNSUPPORTED_PROTOCOL

http2.connect() получил URL, использующий протокол, отличный от http: или https:.

Ошибка ERR_INDEX_OUT_OF_RANGE

Указанный индекс вышел за допустимый диапазон (например, отрицательные смещения).

Ошибка ERR_INVALID_ARG_TYPE

В Node.js API был передан аргумент неверного типа.

Ошибка ERR_INVALID_ASYNC_ID

Используя AsyncHooks, был передан неверный asyncId или triggerAsyncId. Значение id, меньшее, чем -1, недопустимо.

Ошибка ERR_INVALID_CALLBACK

Функция обратного вызова была необходима, но не была предоставлена в Node.js API.

Ошибка ERR_INVALID_FILE_URL_HOST

Node.js API, использующий file: URL (например, некоторые функции в модуле fs), столкнулся с файловым URL с несовместимым хостом. Эта ситуация может возникнуть только в системах Unix-подобных, где поддерживаются только localhost или пустой хост.

Ошибка ERR_INVALID_FILE_URL_PATH

Node.js API, использующий file: URL (например, некоторые функции в модуле fs), столкнулся с файловым URL с несовместимым путем. Точные правила определения допустимости пути зависят от платформы.

Ошибка ERR_INVALID_HANDLE_TYPE

Была предпринята попытка передать недопустимый «дескриптор» по каналу IPC в дочерний процесс. Подробнее см. subprocess.send() и process.send().

Ошибка ERR_INVALID_OPT_VALUE

В объекте options было передано некорректное или неожиданное значение.

Ошибка ERR_INVALID_PERFORMANCE_MARK

При использовании API отслеживания производительности (perf_hooks) метка производительности является недопустимой.

Ошибка ERR_INVALID_PROTOCOL

Было передано недопустимое значение options.protocol.

Ошибка ERR_INVALID_SYNC_FORK_INPUT

В качестве стандартного ввода для синхронного процесса fork был передан Buffer, Uint8Array или string. Подробнее см. документацию модуля child_process.

Ошибка ERR_INVALID_THIS

Функция Node.js API была вызвана с несовместимым значением this.

Пример:

const { URLSearchParams } = require('url');
const urlSearchParams = new URLSearchParams('foo=bar&baz=new');

const buf = Buffer.alloc(1);
urlSearchParams.has.call(buf, 'foo');
// Throws a TypeError with code 'ERR_INVALID_THIS'

Ошибка ERR_INVALID_TUPLE

Элемент в iterable, переданный конструктору WHATWG URLSearchParams конструктор, не представлял собой [name, value] кортеж – то есть, если элемент не является итерируемым или не состоит ровно из двух элементов.

Ошибка ERR_INVALID_URL

Неверный URL был передан конструктору WHATWG URL конструктор для разбора. Объект ошибки, обычно, имеет дополнительное свойство 'input', содержащее URL, который не удалось разобрать.

Ошибка ERR_INVALID_URL_SCHEME

Была предпринята попытка использовать URL с несовместимой схемой (протоколом) для определенной цели. Используется только в поддержке WHATWG URL API в модуле fs (который принимает только URL со схемой 'file'), но в будущем может быть использован и в других Node.js API.

Ошибка ERR_IPC_CHANNEL_CLOSED

Была предпринята попытка использовать канал IPC, который уже был закрыт.

Ошибка ERR_IPC_DISCONNECTED

Была предпринята попытка отключить канал IPC, который уже был отключен. Подробнее см. документацию модуля child_process.

Ошибка ERR_IPC_ONE_PIPE

Была предпринята попытка создать дочерний Node.js процесс с использованием более чем одного канала IPC. Подробнее см. документацию модуля child_process.

Ошибка ERR_IPC_SYNC_FORK

Была предпринята попытка открыть канал IPC с синхронно созданным дочерним Node.js процессом. Подробнее см. документацию модуля child_process.

Ошибка ERR_MISSING_ARGS

Не был передан необходимый аргумент Node.js API. Используется только для строгого соответствия спецификации API (которая в некоторых случаях может принимать func(undefined), но не func()). В большинстве нативных Node.js API func(undefined) и func() рассматриваются идентично, и вместо этого может использоваться код ошибки ERR_INVALID_ARG_TYPE.

Ошибка ERR_MISSING_DYNAMIC_INSTANTIATE_HOOK

Уровень стабильности: 1 - Экспериментальный

Используется, когда загрузчик модулей [ES6 module][] указывает format: 'dynamic, но не предоставляет хук dynamicInstantiate.

Ошибка ERR_MISSING_MODULE

Уровень стабильности: 1 - Экспериментальный

Используется, когда модуль [ES6 module][] не может быть разрешен.

Ошибка ERR_MODULE_RESOLUTION_LEGACY

Уровень стабильности: 1 - Экспериментальный

Используется, когда произошла ошибка при разрешении импорта в модуле [ES6 module][].

Ошибка ERR_MULTIPLE_CALLBACK

Функция обратного вызова была вызвана более одного раза.

Примечание: Функция обратного вызова практически всегда должна вызываться только один раз, так как запрос может быть либо выполнен, либо отклонен, но не оба одновременно. Последнее было бы возможно, вызвав обратный вызов более одного раза.

Ошибка ERR_NAPI_CONS_FUNCTION

При использовании N-API, переданный конструктор не является функцией.

Ошибка ERR_NAPI_CONS_PROTOTYPE_OBJECT

При использовании N-API, Constructor.prototype не является объектом.

Ошибка ERR_NAPI_INVALID_DATAVIEW_ARGS

При вызове napi_create_dataview(), указанный offset выходил за пределы dataview или offset + length было больше, чем длина указанного buffer.

Ошибка ERR_NAPI_INVALID_TYPEDARRAY_ALIGNMENT

При вызове napi_create_typedarray(), предоставленный offset не был кратным размеру элемента.

Ошибка ERR_NAPI_INVALID_TYPEDARRAY_LENGTH

При вызове napi_create_typedarray(), (length * size_of_element) + byte_offset было больше, чем длина указанного buffer.

Ошибка ERR_NAPI_TSFN_CALL_JS

Произошла ошибка при вызове JavaScript-части функции thread-safe function.

Ошибка ERR_NAPI_TSFN_GET_UNDEFINED

Произошла ошибка при попытке получить значение JavaScript undefined.

Ошибка ERR_NAPI_TSFN_START_IDLE_LOOP

В главном потоке значения удаляются из очереди, связанной с функцией thread-safe function, в цикле обработки вхожих задач. Эта ошибка указывает на ошибку при попытке начать цикл.

Ошибка ERR_NAPI_TSFN_STOP_IDLE_LOOP

После того, как в очереди больше нет элементов, цикл обработки вхожих задач должен быть приостановлен. Эта ошибка указывает на ошибку при попытке остановить цикл.

Ошибка ERR_NO_ICU

Была предпринята попытка использовать функции, требующие ICU, но Node.js не был скомпилирован с поддержкой ICU.

Ошибка ERR_SOCKET_ALREADY_BOUND

Была предпринята попытка привязать сокет, который уже был привязан.

Ошибка ERR_SOCKET_BAD_PORT

Функция API, ожидавшая порт > 0 и < 65536, получила недопустимое значение.

Ошибка ERR_SOCKET_BAD_TYPE

Функция API, ожидавшая тип сокета (udp4 или udp6), получила недопустимое значение.

Ошибка ERR_SOCKET_CANNOT_SEND

Не удалось отправить данные по сокету.

Ошибка ERR_SOCKET_CLOSED

Была предпринята попытка операции с уже закрытым сокетом.

Ошибка ERR_SOCKET_DGRAM_NOT_RUNNING

Был сделан вызов, а UDP-подсистема не работала.

Ошибка ERR_STDERR_CLOSE

История
Версия Изменения
v8.16.0

Вместо вывода ошибки, process.stderr.end() теперь только закрывает сторону потока, но не базовый ресурс, что делает эту ошибку устаревшей.

Была предпринята попытка закрыть поток process.stderr. По умолчанию Node.js не разрешает закрытие потоков stdout или stderr кодом пользователя.

ERR_STDOUT_CLOSE

История
Версия Изменения
v8.16.0

Вместо вывода ошибки, process.stderr.end() теперь только закрывает сторону потока, но не базовый ресурс, что делает эту ошибку устаревшей.

Была предпринята попытка закрыть поток process.stdout. По умолчанию Node.js не разрешает закрытие потоков stdout или stderr кодом пользователя.

Ошибка некорректного альтернативного имени сертификата TLS

При использовании TLS имя хоста/IP-адрес удаленного узла не совпал ни с одним из альтернативных имен субъекта в его сертификате.

Ошибка слишком малого размера параметра Diffie-Hellman TLS

При использовании TLS предоставленные параметры для протокола согласования ключей Diffie-Hellman (DH) слишком малы. По умолчанию длина ключа должна быть не менее 1024 бит, чтобы избежать уязвимостей, хотя для большей безопасности настоятельно рекомендуется использовать 2048 бит или больше.

Ошибка таймаута рукопожатия TLS

Таймаут рукопожатия TLS/SSL. В этом случае сервер также должен прервать соединение.

Ошибка неудачной повторной настройки TLS

Запрос на повторную настройку TLS завершился неудачно по неопределенной причине.

Ошибка отсутствия имени сервера в TLS

При использовании TLS метод server.addContext() был вызван без указания имени хоста в первом параметре.

Ошибка атаки на сеанс TLS

Обнаружено чрезмерное количество повторных настроек TLS, что является потенциальным вектором атак типа отказа в обслуживании.

Ошибка трансформации Transform потока

Поток Transform завершился, пока он все еще выполнял преобразование.

Ошибка завершения Transform потока с нулевой длиной

Поток Transform завершился с данными, которые все еще находятся в буфере записи.

Ошибка неизвестного сигнала

Был передан недопустимый или неизвестный сигнал процесса API, ожидающему допустимый сигнал (например, subprocess.kill()).

Ошибка неизвестного типа файла STDIN

Была предпринята попытка запустить процесс Node.js с неизвестным типом файла stdin. Эта ошибка обычно указывает на ошибку в самом Node.js, хотя код пользователя может ее вызвать.

Ошибка неизвестного типа потока

Была предпринята попытка запустить процесс Node.js с неизвестным типом файла stdout или stderr. Эта ошибка обычно указывает на ошибку в самом Node.js, хотя код пользователя может ее вызвать.

Ошибка API V8 BreakIterator

Был использован API V8 BreakIterator, но полный набор данных ICU не установлен.

Ошибка некорректного типа записи производительности

При использовании API отслеживания производительности (perf_hooks) не были найдены допустимые типы записей производительности.

Ошибка значения вне диапазона

Указанное значение находится вне допустимого диапазона.

© Joyent, Inc. and other Node contributors
Licensed under the MIT License.
Node.js is a trademark of Joyent, Inc. and is used with its permission.
We are not endorsed by or affiliated with Joyent.
https://nodejs.org/dist/latest-v8.x/docs/api/errors.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API