2015-02-07 4 views
1

Я стараюсь изо всех сил, чтобы в моем коде не было ошибок, но иногда есть неперехваченное исключение, которое приходит и убивает мое приложение.Экспресс 4/Узел JS - Изящное управление uncaughtException

Я мог бы сделать это, не убивая приложение, а вместо этого вывожу его в файл где-нибудь и попробую возобновить приложение, где оно остановилось, или перезапустить тихо и показать приятное сообщение всем пользователям приложения о том, что что-то пошло не так, и дать ему секунду, пока он разбирается.

В случае, если приложение не работает, было бы хорошо, если бы он мог перенаправить его куда-то, где говорится: «Приложение не работает, свяжитесь с нами, чтобы сообщить мне» или что-то в этом роде.

Я мог бы использовать process.on ('uncaughtException') ... - но это правильная вещь?

Большое спасибо за то, что нашли время, чтобы прочитать это, и я ценю вашу помощь и мысли по этому вопросу.

ответ

1

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

В противном случае используйте clusters для перезапуска приложения.

// ... your code ... 

var cluster = require('cluster'); 
process.on('uncaughtException', function(err){ 
    //.. do with `err` as you please 
    cluster.fork(); // start another instance of the app 
}); 

Когда вилки, как это влияет на пользователей - они испытывают какие-либо задержки в то время как это переключение?

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

if (cluster.isMaster) 
    require('os').cpus().forEach(cluster.fork); 

cluster.on('exit', cluster.fork); 

Есть что-нибудь, что я должен высматривать, например, скажем, произошла ошибка, связанная с базой данных, и я не включил обработчик, чтобы справиться с этим, поэтому приложение продолжало сбой - будет ли он просто пытаться развернуть и запугать все системные ресурсы?

Я до сих пор не думал об этой проблеме. Звучит неплохо.

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

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

mongoose.connection.on('open', function() { 
    // create forks here 
}); 
mongoose.connection.on('error', function() { 
    // don't start the app if database isn't working.. 
}); 

Или, может быть, такие ошибки должны быть идентифицированы, а вилки не должны создаваться. Но вам, вероятно, придется заранее знать, какие ошибки могут быть такими, чтобы вы могли справиться с ними.

+0

Спасибо @laggingreflex - вы использовали кластеры раньше - если это так, когда это вилки - как это влияет на пользователей - они испытывают любую задержку во время ее переключения - и есть ли что-нибудь, что я должен искать (например,скажем, произошла ошибка, связанная с базой данных, и я не использовал обработчик, чтобы справиться с этим, поэтому приложение продолжало терпеть крах - будет ли он просто пытаться развернуть и запугать все системные ресурсы?). – doublesidedstickytape

+0

checkout обновленный ответ – laggingreflex

+0

Отлично @laggingreflex для вашего ответа - это выглядит точно так же, как и то, что я искал. :) – doublesidedstickytape

Смежные вопросы