Express.js 4 и модуль домена: почему домен не обрабатывает ошибку?
Я пытаюсь ознакомиться с модулем домена. Итак, я создал образец исследования ниже:
var express = require('express')
var domain = require('domain')
var supertest = require('supertest')
describe('some', function() {
it('some', function(done) {
var app = express()
app.use(function(req, res, next) {
var d = domain.create();
d.on('error', function(e) {
console.log('here')
});
d.run(next)
})
app.use('*', function(req, res) {
throw new Error()
res.end()
})
supertest(app).get('/').expect(200, done)
})
})
Но это не работает, как я ожидал. Может кто-нибудь объяснить, почему он никогда не достигает error
Перезвоните?
Дополнительная информация:
$ npm list --depth=0
├── express@4.13.4
├── mocha@2.4.5
└── supertest@1.2.0
$ node -v
v6.0.0
PS: это устарело, я знаю. Но на данный момент нет альтернативы и большой кодовой базы проектов, которые фактически ее используют
1 ответ
Решение
Причина в том, что Express 4 выполняет обработку исключений до того, как ваш код с доменом заработает, вы можете убедиться, что я прав, добавив следующий обработчик снизу, он как бы оборачивает все в try/catch, и если нет обработчика ошибок, печатает стек ошибок:
app.use(function (err, req, res, next) {
console.log(err);
res.end();
});