Может кто-нибудь объяснить, что такое коды ошибок в 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 }

это коды ошибок. Для более подробной информации, пожалуйста, проверьте этот блог на среднем блоге.

Другие вопросы по тегам