Node.js
Управление ошибками Node.js
Поиск…
Вступление
Мы узнаем, как создавать объекты Error и как бросать и обрабатывать ошибки в Node.js
Будущие изменения, связанные с передовыми методами обработки ошибок.
Создание объекта Error
новая ошибка (сообщение)
Создает новый объект ошибки, где для message
значения задано свойство message
созданного объекта. Обычно аргументы message
передаются в конструктор ошибок в виде строки. Однако, если аргументом message
является объект не строка, то конструктор ошибок вызывает метод .toString()
переданного объекта и устанавливает это значение в свойство message
созданного объекта ошибки.
var err = new Error("The error message");
console.log(err.message); //prints: The error message
console.log(err);
//output
//Error: The error message
// at ...
Каждый объект ошибки имеет трассировку стека. Трассировка стека содержит информацию об ошибке и показывает, где произошла ошибка (приведенный выше вывод показывает стек ошибок). После создания объекта ошибки система фиксирует трассировку стека ошибки в текущей строке. Чтобы получить трассировку стека, используйте свойство стека для любого созданного объекта ошибки. Ниже две строки идентичны:
console.log(err);
console.log(err.stack);
Ошибка выброса
Ошибка броска означает исключение, если какое-либо исключение не обрабатывается, тогда сервер узла будет аварийно завершен.
Следующая строка вызывает ошибку:
throw new Error("Some error occurred");
или же
var err = new Error("Some error occurred");
throw err;
или же
throw "Some error occurred";
Последний пример (бросание строк) не является хорошей практикой и не рекомендуется (всегда бросайте ошибки, являющиеся экземплярами объекта Error).
Обратите внимание, что если вы throw
ошибку в свою, то система выйдет из строя на этой строке (если нет обработчиков исключений), после этой строки никакой код не будет выполнен.
var a = 5;
var err = new Error("Some error message");
throw err; //this will print the error stack and node server will stop
a++; //this line will never be executed
console.log(a); //and this one also
Но в этом примере:
var a = 5;
var err = new Error("Some error message");
console.log(err); //this will print the error stack
a++;
console.log(a); //this line will be executed and will print 6
попробуйте ... catch block
try ... catch block предназначен для обработки исключений, помните, что исключение означает сброшенную ошибку, а не ошибку.
try {
var a = 1;
b++; //this will cause an error because be is undefined
console.log(b); //this line will not be executed
} catch (error) {
console.log(error); //here we handle the error caused in the try block
}
В блоке try
b++
выдается ошибка и эта ошибка передается блоку catch
который можно обрабатывать там или даже может быть вызвана той же ошибкой в блоке catch или сделать небольшую модификацию, а затем выбросить. Давайте посмотрим следующий пример.
try {
var a = 1;
b++;
console.log(b);
} catch (error) {
error.message = "b variable is undefined, so the undefined can't be incremented"
throw error;
}
В приведенном выше примере мы изменили свойство message
объекта error
и затем выбросили измененную error
.
Вы можете выполнить любую ошибку в блоке try и обработать ее в блоке catch:
try {
var a = 1;
throw new Error("Some error message");
console.log(a); //this line will not be executed;
} catch (error) {
console.log(error); //will be the above thrown error
}