2014-02-19 2 views
3

그래, 아래의 예에서는 서버에 무엇인가를 요청합니다. 응답이 돌아 오면 JSON을 구문 분석하고 mongodb에 데이터를 추가합니다.http 요청에서 응답을받지 못한 경우 node.js에서 어떻게 알 수 있습니까?

그러나 응답이 없으면 분명히 이벤트가 발생하지 않습니다. 어떻게하면 응답을받지 못한 경우 오류가 발생하지 않고 요청을 취소하고 함수를 호출 할 수 있도록 시간 초과를 추가 할 수 있습니까? (나는 이메일을 보내는 함수를 호출하도록 할 것이다.)

고마워!

var req = https.request(options, function(res) { 
     res.on('data', function(d) { 
      if(d) buffer += d; 
     }); 

     res.on('end', function(){ 
      var validResponse = true; 
      var object; 
      try { 
       object = JSON.parse(buffer); 
      } catch (err) { 
       console.log('response: '+ buffer); 
       console.log('error in response: ' + err); 
       validResponse = false; 
      } 
      if(validResponse) { 
       db.stuff.update(
        {stuff: "MyStuff"}, 
        {stuff: "MyStuff", foo: object.bar}, 
        {upsert: true}, 
        function() { 
         var time2 = new Date(); 
         console.log('db successfully updated db at '+time2.toTimeString()); 
        } 
       ); 
      } 
     }); 
    }); 

답변

2

당신은 request.setTimeout(timeout, [callback])api를 사용할 수 있습니다.

req.setTimeout(5000, function() { 
    console.log('timed out'); 
    req.abort(); 
}); 
+0

고마워요! BTW, req.on ('socket', function (socket) {socket.setTimeout (10000); socket.on ('timeout', function() {socket.destroy();}과 같은 일을하는 것이 적절한시기는 언제입니까?)})); 너가 여기서 제안한 것과는 반대되는거야? (주석에 코드를 삽입하는 것에 대해 유감스럽게 생각합니다.) – CommaToast

+0

둘 다 동일합니다. req.setTimeout은 더 짧은 방법입니다. – vinayr

관련 문제