Express.js 如何屏蔽响应错误
发布于 10 年前 作者 jackmasa 4666 次浏览 最后一次编辑是 8 年前

在写一个小应用,发现访问的时候如果服务端用到了的 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处理等等。

回到顶部