我尝试使用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 ?
});
}
答案 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)