使用ExpressJS处理错误

时间:2019-02-13 10:19:50

标签: node.js express

我尝试使用ExpressJS处理503和500错误,但仅能处理404错误。

我的中间件:

var error = function(server) {

  // 404
  server.app.use(function(request, response) {
    response.status(404);
    response.redirect('/404');
  });

  // 500
  server.app.use(function(error, request, response, next) {
    response.status(500);
    response.redirect('/500');
    next(error);
  });

  // 503
  server.app.use(function(error, request, response, next) {
    response.status(503);
    response.redirect('/503');
    next(error);
  });
};

module.exports = error;

控制器中的功能(使用路由):

function error500(request, response) {
  response.render('0-templates/' + response.locals.options.template + '/500', {
    _layoutFile: false,
    error: //how to get the error ?
  });
}

2 个答案:

答案 0 :(得分:1)

您缺少error回调的404参数,该参数导致 express 认为它是中间件,而不是错误处理程序,因此对于通过所述中间件的每个请求都返回404。

您还应该向所有错误处理程序添加next参数。

来自express documentation on error handling

  

以与其他中间件函数相同的方式定义错误处理中间件函数,除了错误处理函数具有四个参数而不是三个参数:(err,req,res,next)。

答案 1 :(得分:0)

不知道为什么要使用3个不同的函数,因为快递中只有一个错误处理程序,因此可以使用类似的方法:

server.app.use((err, req, res, next) => {
  if (err.code) {
    res.status(err.code);
    console.log(err);
    return res.redirect('/'+err.code);
  } else {
    res.status(500);
    console.log(err);
    return res.redirect('/500');
  }
});

或类似的东西,为了执行错误响应,您应该从逻辑代码中调用next(err)

来源:herehere