javascript - 防止 Node 类型错误崩溃的应用程序

标签 javascript node.js error-handling request

使用简单的 request.js http client我注意到有时一个简单的 TypeError 可能会使整个 Node 应用程序崩溃。以其中一个例子为例:

request('http://www.google.com', function (error, response, body) {
    if (!error && response.statusCode == 200) {
       console.log(body) // Print the google web page.
    }
})

现在,假设(在 Google 的情况下!)Google 无法响应并且连接挂起然后超时的情况。由于 response 未定义,因此无法读取 response.statusCode,此代码只会使 Node 应用程序崩溃。这会冒泡到事件循环并触发错误崩溃:

TypeError: Cannot read property 'statusCode' of undefined

防止这种情况发生的最简单方法是什么?我可以在检查 statusCode 之前添加对 error 值的检查,例如:

request('http://www.google.com', function (error, response, body) {
    if (!error) {
        if (response.statusCode == 200) {
          // do stuff
        }
    }
})

但如果可能的话,我宁愿不在应用程序中添加不必要的行。我可能在这里遗漏了一些明显的东西!非常感谢任何指针。谢谢。

最佳答案

简短回答:这就是您得到的。 详细回答:

  • 始终检查错误
  • 经常检查你的数据

所以,像这样的东西很不错:

if (!error && body) {
  //do whatever you want with your body
}

if (!error && response) {
  //do whatever you want with response
}

在尝试访问对象之前,您必须确保该对象存在(在无法保证对象存在的情况下)。另外,看看 maybe2模块。使用此模块,您可以编写如下内容:

if (!error && maybe(response).getOrElse({}).statusCode == 200) {
  //your code here
}
  • 使用 node.js 集群模式,主管模块,如 forever和/或负载平衡代理,如在您的应用程序前面的 nginx。这样,如果一个请求失败,其他请求将由您应用的其他实例完成。
  • 准备好在客户端处理错误并在失败时重复请求。

关于javascript - 防止 Node 类型错误崩溃的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23029911/

相关文章:

node.js - 如何对 Google Cloud Pub/Sub 队列进行速率限制

node.js - 错误!无效 : strip-ansi@0. 2.2

c# - 向 UI 传达错误消息的建议做法

error-handling - GsonResponseBodyConverter的EOFException带有errorBody()

vba - 为什么某些 VBA 错误不触发错误处理?

javascript - IndexedDB游标

javascript - 无法访问对象属性angularjs

javascript - 如何在 TypeScript 中使用 mocha 模拟 axios 依赖?

javascript - mongoDB 上整个集合的平均值

javascript - 使用名称 "in"的 Socket.io 使 Webstorm IDE 引发错误