Может кто-нибудь объяснить, что такое коды ошибок в nodejs (не коды состояния)
Этот вопрос я встречал в своих интервью много раз, но до сих пор не могу найти ответ на этот вопрос. Я уже гуглил это, но не нашел точного ответа на это. Пожалуйста, дайте мне знать точный ответ для этого.
Вопрос: что такое коды ошибок в NodeJ?
Я ответил на коды ошибок. Но интервьюер сказал, что я не прошу коды статуса. Просьба объяснить ответ. Заранее спасибо.
2 ответа
Вы сталкиваетесь с этим вопросом, потому что код ошибки был введен в узле 8.x до 8, в классе Error было сообщение об ошибке, которое вызывало проблемы в самых простых вещах, из-за которых разработчики были вынуждены создавать собственные классы для Error. См. https://nodejs.org/docs/latest-v7.x/api/errors.html
Позже в узле 8 коды ошибок вводятся в узле 8.x для всех объектов ошибок, создаваемых API-интерфейсами Node.js https://nodejs.org/api/errors.html
Коды ошибок узла: https://nodejs.org/dist/latest/docs/api/errors.html
Почему вы должны использовать коды ошибок?
До 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
}
}
Использование вышеупомянутой практики гарантирует, что если / когда сообщение изменится в будущем, код не будет затронут, так как код ошибки останется неизменным.
Да, коды ошибок и коды состояния разные вещи. Коды ошибок всегда, когда мы имеем какие-либо в узле, как
try{} catch(error){ error.code }
это коды ошибок. Для более подробной информации, пожалуйста, проверьте этот блог на среднем блоге.