간단한 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.
}
})
이제 Google이 응답하지 않고 연결이 중단 된 후 시간이 초과되는 가상 (Google의 경우!) 상황을 살펴 보겠습니다. 이 코드 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
}
}
})
하지만 가능하면 앱에 불필요한 줄을 추가하지 않는 것이 좋습니다. 나는 여기서 명백한 것을 놓치고 있을지도 모른다! 어떤 포인터라도 대단히 감사합니다. 감사.
짧은 대답 : 이것이 당신이 얻는 것입니다. 자세한 답변 :
따라서 다음과 같은 것은 꽤 괜찮습니다.
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
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다