3

我正在尝试熟悉域模块。所以,我在下面创建了一个研究样本:

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:它已被弃用,我知道。但是目前没有替代品和实际使用它的项目的大型代码库

4

1 回答 1

2

原因是Express 4 在您的域代码工作之前进行异常处理,您可以通过在底部添加以下处理程序来确保我是正确的,它有点将所有内容包装在 try/catch 中,如果没有错误处理程序打印错误堆栈:

app.use(function (err, req, res, next) {
   console.log(err);
   res.end();
});
于 2016-05-11T16:12:15.170 回答