有没有办法使ExpressJS日志运行时错误?

时间:2016-04-13 21:15:24

标签: node.js express error-handling

我最近遇到了一个我的快速路线悬挂的问题,我花了很长时间才弄清楚我的一个函数调用中有一个拼写错误,所以它试图调用一个没有函数的函数存在。

例如:

router.get('/example', function(req, res) {
    UserService.nonExistentFunction();
    res.status(200).send();
});

对我来说,这感觉应该像我的日志中以运行时异常的形式一样像拇指一样伸出来。但是,服务器什么也没做,请求只是默默地挂着,没有提示是什么问题。

有没有更好的方法来捕获这些虚拟类型错误?

1 个答案:

答案 0 :(得分:2)

您可以在Express中定义自己的错误处理程序。http://expressjs.com/en/guide/error-handling.html 取决于您的权限,您可以在控制台或文件中记录错误。在我的应用程序中,我正在做这样的事情,

import debug = require('debug');
var app = module.exports = express();
var errorLogger = debug('error');

// Error handling
app.use(logErrors);
app.use(clientErrorHandler);
app.use(errorHandler);

// Handle 404
app.use(function(req, res, next) {
  res.status(404).send('Sorry cant find that!');
});


function logErrors(err, req, res, next) {
  errorLogger(err.stack);
  next(err);
}

function clientErrorHandler(err, req, res, next) {
  if (req.xhr) {
    res.status(500).send({ error: 'Something failed!', status: 500 });
  } else {
    next(err);
  }
}

function errorHandler(err, req, res, next) {
  res.status(500);
  res.render('error', { error: err, status: 500 });
}