Вы столкнулись с этим вопросом, потому что код ошибки был введен в узле 8.x до 8, в классе Error было сообщение об ошибке, которое вызывало проблемы в самых простых вещах, из-за которых разработчики были вынуждены создавать собственные классы для Error.См. https://nodejs.org/docs/latest-v7.x/api/errors.html#errors_class_error
Позже в Узле 8 коды ошибок вводятся в узле 8.x для всех объектов ошибок, выданных API-интерфейсами Node.js https://nodejs.org/api/errors.html#errors_class_error
УзелКоды ошибок: https://nodejs.org/dist/latest/docs/api/errors.html#errors_node_js_error_codes
Почему вы должны использовать коды ошибок?
До Node7, большинство ошибок, выданных Node.js, содержало только сообщениесвязан с ними.Если вы хотите, чтобы ваш код выполнял определенное действие, основанное на ошибке, вам пришлось бы сравнить строку сообщения с известным значением.Результат может быть что-то вроде:
try {
// Do something
}
catch(error) {
if (error.message == 'a simpe error'){
// do something
}
else {
// do something
}
}
Это не очень хорошая практика, так как в большинстве случаев, когда вы получаете сообщение об ошибке из Node.js, более вероятно, что ваш код будет просто регистрировать / отображать сообщение, а затем переходитьк общему пути восстановления.
Теперь вы могли заметить, что в сравнении сообщений, использованном в приведенном выше примере, есть опечатка.Что ж, это может произойти и с базой кода Node.js, или существуют возможности переопределения строк сообщения узлом.
Жесткая зависимость от строки сообщения также создает проблему для интернационализации.
Это должно позволить переписать предыдущий пример следующим образом:
try {
// Do something
}
catch(error) {
if (error.code == 'A_ERROR_CODE'){
// do something
}
else {
// do something
}
}
Использование вышеупомянутой практики гарантирует, что если / когда сообщение изменится в будущем, код не будет затронут как ошибкакод остается без изменений.