使用简单的request.js http client我注意到有时简单的TypeError
可能会导致整个节点应用崩溃。采取其中一个例子:
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
我能阻止这种情况发生的最简单方法是什么?我可以在检查error
之前添加statusCode
值的检查,例如:
request('http://www.google.com', function (error, response, body) {
if (!error) {
if (response.statusCode == 200) {
// do stuff
}
}
})
但是如果可能的话,我宁愿不给应用添加不必要的行。我可能会遗漏一些明显的东西!任何指针都非常感激。感谢。
答案 0 :(得分:4)
简短回答:这就是你得到的。 详细答案:
所以,这样的事情很不错:
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
}