Express.js 如何屏蔽响应错误
在写一个小应用,发现访问的时候如果服务端用到了的 POST 或者是 GET 中的变量没有给的话服务器会直接把运行路径响应。
目前尝试过: app.use(express.errorHandler());
domain 模块的方式没太搞明白,但在 PHP 中只需要一句 error_report 就可以搞定了。
4 回复
Express 的错误回调的是任何 4 个参数的函数。
error_handler = function(err,req,res,next) {
// handle your error
}
// app.use(...);
app.use(error_handler);
还是会有报错。
如果直接 throw error会出错. 需要通过next传递给路由. 另外, 异步里面的抛错, 还是会传给node, 需要try catch掉
看起来你需要domain和Express的ErrorHandler结合起来使用。
domain的简单demo
var domain = require('domain').create();
domain.on('error', function (err) { // 没有处理的异常都会被它处理
console.log('EEE: ' + err);
});
domain.run(function () {
var str = null;
str.indexOf('a'); // TypeError: Cannot call method 'indexOf' of null
// 会产生 ‘error‘ 事件,进而被domain处理
throw new Error('deliberately thrown error'); // Error: deliberately thrown error
// 同上
});
如果你打算处理抛出的异常,你可以 try … catch、交给Express的error handler处理等等。