Veneomin
@Veneomin

Как перенастроить ошибки в nodejs?

Не знал как правильно сформулировать заголовок, в общем на данный момент когда происходит ошибка, то апликация сразу падает. Как сделать так, чтобы при ошибках например срабатывала определенная функция а апликация продолжала работать? Волнует вопрос продакшина, не хотелось бы чтобы сайт при первой же найденной ошибке падал в офлайн.
  • Вопрос задан
  • 268 просмотров
Пригласить эксперта
Ответы на вопрос 3
TheCreator
@TheCreator
Бездельник
Вам нужна вот такая магия, но так делать нехорошо.
process.on('uncaughtException', function (processError) {
  console.log(processError.stack);
});

Просто вставьте в начале скрипта. Теперь приложение будет продолжать работу, даже если случится какая-то ошибка, просто залогирует её в консоль. Но, повторюсь, так делать некрасиво.
Может быть лучше посмотреть за менеджером процессов типа forever, который будет наблюдать за процессом и если он упадёт - перезапускать. Так более кошерно, на самом деле. Ну и вообще, продакшен не должен падать в принципе.
Ответ написан
Комментировать
externuz
@externuz
Javascript
Приведите конкретный пример метода в котором нужно отловить ошибку
Ответ написан
MarcusAurelius
@MarcusAurelius Куратор тега Node.js
автор Impress Application Server для Node.js
С одной стороны после необработанной ошибки оставлять в памяти процесс плохо, будут утечки памяти, испорченные данные и незавершенные обработчики могут привести к непредсказуемым последствиям. В этом случае многие рекомендуют перезапускать процесс при помощи менеджеров типа forever и не видит в этом ничего страшного. Я же считаю что не нормально когда процесс постоянно падает и перезапускаеься. Нужно все-таки искать ошибки исправлять их. Тем не менее редкие ошибки могут попадать конечно и в продакшен. Тут можно применять несколько уровней восстановления после ошибок: домены, о которых уже говорилось - для отлова асинхронных исключений, песочницы (sandbox) - для экранирования области памяти в которой происходит утечка в прикладном коде с удалением песочниц после критических исключений, критические секции - они в ноде нужны редко, т.к. не подходят для асинхронного кода, но все-таки иногда могут быть полезны. Все эти способы в комплексе я применил в сервере приложений Impress, если уже не прямо брать его, то исходники посмотреть не помешает: https://www.npmjs.com/package/impress
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы