gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 02:37:57 26 4
gpt4 key购买 nike

假设 Node.js v0.10.22 和 Express v3。我一直在尝试解决一个简单的问题:当出现问题时,我想至少显示 500 页并退出服务器(因为显然这是最好的做法 - 因此可以稍后重新启动)。

我可以根据自己的回调弄清楚 - 我可以返回一个 err 响应并优雅地退出。我无法弄清楚的是下面的场景。我读到的所有内容要么不稳定( http://nodejs.org/api/domain.html ),要么有很多做事的方法(域、uncaughtException、中间件错误参数)。

那么,在使用 Node.js + Express 框架时:遇到这些场景时,如何才能显示 500 个页面并干净地退出?

a) sdfg();/* 不存在的函数 */

b) sdfg/* 语法错误 */

c) 抛出新错误(“无法连接到redis”);/* 第 3 方抛出错误 */

有办法吗?人们在生产中如何做到这一点? P.S:是的,我看过这个页面:Error handling principles for Node.js + Express.js applications?

最佳答案

我认为您可以在放置在 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" })
}
}
})

关于node.js - 处理 Node.js + Express 应用程序中的所有错误的最佳正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20305463/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com