Что-то не так с доменами в NodeJS

У меня есть этот простой код. Это должно показать мне мой объект ошибки ({error: 'error'}) по каждому запросу. Но он показывает только "[Объект объекта]". И более того - отладчик никогда не останавливается в функции обработчика ошибок. Что происходит?

var domain = require('domain');
var express = require('express');
var server = express();

server.get('/', function(req, res)
{
 var d = domain.create();
 d.on('error', function(e)
 {
 debugger;
 console.log(JSON.stringify(e));
 }); 

 d.run(function()
 { 
 throw {error:'error'};
 res.send('ok');
 });
});

server.listen(8080);
1 ответ

Проблема в том, что домены ловут ошибку полностью в нижней части стека вызовов, а так как у экспресс есть свой код обработки ошибок, ошибка попадает в эксплойт до достижения домена. Аналогичная проблема здесь: Node.js - запрос домена на экспресс, внутри другого домена

Я не вижу особого основания, что так должно быть, но как работает код [1] (источник здесь: https://github.com/******/node/blob/master/lib/domain. js). Возможные обходные пути - d.run() вызов d.run() с помощью собственного try/catch или сделать что-то вроде

d.run(process.nextTick(function() {
 // do stuff
}));

[1] Способ работы доменов заключается в том, что они в основном подключаются ко всем "асинхронным" обратным вызовам и добавляют некоторую информацию, которая записывает, кто инициировал асинхронную операцию. Я не знаю, почему они не пытаются и не поймать исходный синхронный блок.

licensed under cc by-sa 3.0 with attribution.