Иногда ошибки пугают, но на самом деле они делают наши приложения лучше, когда их нет рядом! Если мы правильно обработаем ошибки, наши фронтенд-команды будут очень благодарны.

«Какое простое действие вы могли бы предпринять сегодня, чтобы создать новый импульс к успеху в своей жизни?» -Тони Роббинс

Ошибки

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

  • Стандартные ошибки JavaScript, такие как синтаксис, ссылка, тип и другие.
  • Системные ошибки вызываются базовыми ограничениями операционной системы, такими как попытка открыть файл, который не существует, или попытка отправить данные через закрытый сокет.
  • Пользовательские ошибки, вызванные кодом приложения.
  • AssertionErrors — это особый класс ошибок, которые могут быть вызваны, когда Node.js обнаруживает исключительное нарушение логики, которое никогда не должно происходить. Обычно они вызываются модулем assert.

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

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

В предыдущих статьях мы видели, как мы создаем структуру приложения узла и папки. Мы строим вещи поверх него. Так что, если вы еще не читали, самое время.

Мы говорим, что наши приложения вернули успешный результат JSON:

{
    "code": "0",
    "msg": "Success",
    "records": [
        {
            "key": "rXOajnqt",
            "value": "QFKmpxRhmPPm",
            "count": 2169
        }
    ]
}

У нас есть 3 ключа.

код; Код результата. 0 означает успех. Другие коды будут использоваться для ошибок.

сообщение; Краткое описание результата

записи; Этот ключ встречается только в успешных результатах. Он содержит данные о результатах.

подробности; Возникает ошибка. Выдает подробные сообщения об ошибках.

пример ошибки;

{
    "code": "4",
    "msg": "fail",
    "details": "No data found"
}

Как вы видели; Атрибуты code и msg являются взаимными. Это облегчает понимание того, каковы наши результаты, в случае ошибки мы можем посмотреть на детали и исправить проблему.

Давайте углубимся в программирование!

Сначала создайте файл промежуточного программного обеспечения с именем errorHandler.js.

Это вызовет каждую ошибочную ситуацию. Это означает, что мы контролируем ошибки. У нас есть 4 параметра; ошибка, запрос, разрешение, следующий.

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

Я также интегрировал регистратор. Ведение журнала — одна из самых важных вещей. Впрочем, это тема для другого дня.

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

Так что же вызовет это промежуточное ПО?

2 вещи. Неуказанные конечные точки и другие ошибки.

Для другой ошибки я создал папку с именем errors и файл ApiError.js. Если хотите, можете поместить этот файл в scripts/utils.

Мы должны наследовать класс Error от javascript. Таким образом, мы можем получить доступ ко всем ошибкам. Получив доступ к ошибке, мы будем манипулировать ею с помощью этогоключевого слова. Если вы не понимаете, что происходит в этих строках, вы должны изучить ООП.

Наконец-то мы можем вызвать эту функцию и вернуть ошибку.

пример использования;

В этом примере; при проверке данных, если joi выдает ошибку, вызовите класс ошибки с помощью next.

Для неуказанных конечных точек вернитесь к файлу app.js. После всех конечных точек привяжите промежуточное ПО уровня приложения к экземпляру объекта приложения с помощью метода app.use(). Если пользователь отправляет запрос, который не соответствует ни одной конечной точке, этот запрос будет перехвачен. После этого, как и при любой другой ошибке, просто вызовите класс ошибки.

//this runs if the EP is not found
app.use((req, res, next) => {
next(new ApiError(`${req.method} ${req.path} endpoint not avaiable`, 404));
});

Наконец, мы должны вызвать промежуточное программное обеспечение обработчика ошибок в конце файла app.js. Если в приложении возникает ошибка, запускает промежуточное ПО обработчика ошибок, и мы можем вернуть ответ.

app.use(errorHandler);

Надеюсь, вам понравилось и вы узнали новое!