假设Node.js v0.10.22和Express v3。我一直试图解决一个简单的问题:当出现问题时,我想至少显示500页并退出服务器(因为显然这是最好的事情 - 因此可以在以后重新启动)。 / p>
我可以把它弄清楚我自己的回调 - 我可以返回err
响应并优雅地退出。我无法弄清楚的是下面的场景。我读到的所有内容都是不稳定的(http://nodejs.org/api/domain.html)或者有许多做事方式(域名,uncaughtException,中间件错误参数)。
因此,在使用Node.js + Express框架时:在遇到这些情况时,我最好的方式是显示500页并彻底退出?
a)sdfg(); /* non-existant function */
b)sdfg /* syntax error */
c)throw new Error("can't connect to redis"); /* 3rd party throws an error */
有没有办法?人们如何在生产中做到这一点? P.S:是的,我看过这个页面:Error handling principles for Node.js + Express.js applications?
答案 0 :(得分:0)
我认为您可以在app.use(app.router)
之后的中间件中使用错误处理程序,因此您可以自定义您的响应。
app.use(function(err, req, res, next){
// treat as 404
if (err.message
&& (~err.message.indexOf('not found')
|| (~err.message.indexOf('Cast to ObjectId failed')))) {
return next()
}
//if request accept html request
if(req.accepts('html')){
switch(err.status){
case 404: res.status(404).render('404', { url: req.url });break;
default: case 500: res.status(500).render('500', { error: "Internal Server Error" })
}
}else{
switch(err.status){
case 403: res.send(403, { error: "Forbidden" }); break;
case 404: res.send(404, { error: req.originalUrl+' not found' }); break;
default:res.send(500, { error: "Internal Server Error" })
}
}
})