2015-06-29 1 views
2

Я использую node.js с доменами и cluster, чтобы поймать неожиданные исключения (ошибки программиста), а затем изящно перезапустить. Однако иногда у программистов не получается добавить окончательный .catch().finally(), чтобы убедиться, что их код действительно возвращается.Получение обратной связи стека от node.js на тайм-ауте?

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

Есть ли разумный способ сделать это?

В случае, если это имеет значение, мы используем express в качестве рамки, express-domain-middleware, чтобы получить логику доменов/перезапуска и обещает асинхронную логику.

ответ

0

Для этого вам не нужны домены. Если вы используете библиотеку обещаний (например, bluebird или когда или даже Q) или недавнюю версию узла (а именно, io.js), вам не нужно запоминать с помощью .catch все цепочки и использовать выделенные события:

process.on("unhandledRejection", function(e, reason){ 
     // promise was rejected, even if no `catch` or `finally` attached 
     // restart the process 
}); 

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

+0

Downvoter - помогите объяснить почему? –