我正试图捕获中间件库中的错误
但它似乎不起作用。
这不应该起作用吗?
我没有让json回来,服务器退出了。
服务器
var express = require('express');
var mw = require('./lib/middleware.js');
var app = express();
app.use('/mw', mw());
app.listen(3000);
console.log('Express started on port 3000');
中间件:
var domain = require('domain');
module.exports = function(devices) {
return middleware;
};
var middleware = function(req, res) {
var d = domain.create();
d.add(req);
d.add(res);
d.on('error', function(err) {
res.json(500, { error: err })
res.end();
});
d.run(function() {
throw new Error('some error');
});
}
答案 0 :(得分:0)
我在run函数中添加了一个try / catch,因为否则使用了来自express的try / catch。
var domain = require('domain');
module.exports = function() {
return middleware;
};
var middleware = function(req, res) {
var d = domain.create();
d.add(req);
d.add(res);
d.on('error', function(err) {
handleError(res, err);
});
d.run(function() {
try {
throw new Error('some error');
}
catch(err) {
handleError(res, err);
}
});
}
var handleError = function(res, err) {
res.json(500, { error: err.message });
res.end();
}
答案 1 :(得分:0)
我也在努力解决这个问题,并找到了另一个有趣的解决方案。
基本上你需要这种中间件:
function(req,res,next){
var d = domain.create();
d.on('error',next)
d.run(function(){
next();
})
}
我还创建了npm模块,因此可以轻松附加到项目中: