cud*_*mer 5 javascript error-handling request node.js
使用简单的request.js http客户端我注意到有时一个简单的TypeError可能会崩溃整个节点应用程序.以下是其中一个例子:
request('http://www.google.com', function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body) // Print the google web page.
}
})
Run Code Online (Sandbox Code Playgroud)
现在,采取假设(在谷歌的情况下!)的情况,谷歌无法响应,连接只是挂起然后超时.此代码只是因为response未定义而崩溃节点应用程序,因此response.statusCode无法读取.这会冒泡到事件循环并触发崩溃并出现错误:
TypeError: Cannot read property 'statusCode' of undefined
Run Code Online (Sandbox Code Playgroud)
我能阻止这种情况发生的最简单方法是什么?我可以在检查error之前添加一个检查值,statusCode例如:
request('http://www.google.com', function (error, response, body) {
if (!error) {
if (response.statusCode == 200) {
// do stuff
}
}
})
Run Code Online (Sandbox Code Playgroud)
但是如果可能的话,我宁愿不给应用添加不必要的行.我可能会遗漏一些明显的东西!任何指针都非常感激.谢谢.
简短的回答:这就是你得到的。详细答案:
所以,像这样的事情就很好了:
if (!error && body) {
//do whatever you want with your body
}
if (!error && response) {
//do whatever you want with response
}
Run Code Online (Sandbox Code Playgroud)
在尝试访问对象之前,您必须确保对象存在(在不能保证对象存在的情况下)。另外,看看Maybe2模块。有了这个模块,你可以写这样的东西:
if (!error && maybe(response).getOrElse({}).statusCode == 200) {
//your code here
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2331 次 |
| 最近记录: |