Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 防止应用程序崩溃的节点类型错误_Javascript_Node.js_Error Handling_Request - Fatal编程技术网

Javascript 防止应用程序崩溃的节点类型错误

Javascript 防止应用程序崩溃的节点类型错误,javascript,node.js,error-handling,request,Javascript,Node.js,Error Handling,Request,使用simple,我注意到有时候一个简单的TypeError会使整个node应用程序崩溃。举一个例子: request('http://www.google.com', function (error, response, body) { if (!error && response.statusCode == 200) { console.log(body) // Print the google web page. } }) 现在,假设(在谷歌

使用simple,我注意到有时候一个简单的
TypeError
会使整个node应用程序崩溃。举一个例子:

request('http://www.google.com', function (error, response, body) {
    if (!error && response.statusCode == 200) {
       console.log(body) // Print the google web page.
    }
})
现在,假设(在谷歌的例子中!)谷歌没有响应,连接只是挂起然后超时。由于
response
未定义,因此
response.statusCode
无法读取,因此此代码会使节点应用程序崩溃。这会冒泡到事件循环并触发带错误的崩溃:

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
}
在尝试访问对象之前,必须确保对象存在(在无法保证对象存在的情况下)。另外,看一下模块。使用此模块,您可以编写如下内容:

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