处理Node.js + Express应用程序中的所有错误的最佳方法是什么?

时间:2013-11-30 20:48:12

标签: node.js express

假设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?

1 个答案:

答案 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" })
                }
            }
        })