2013-02-16 5 views
2

Node.js's request module을 사용하여 서버를 요청하는 웹 클라이언트를 개발 중입니다. 전송 된 요청은 POST 요청입니다. 서버는 Express를 사용하여 Node.js로 작성됩니다. 프록시로 작동하고 Node.js로 작성된 서버로 요청을 리디렉션하는 NGINX의 또 다른 계층이 있습니다.Node.js 요청 모듈 + NGINX

문제 : 헤더를 명시 적으로 정의하지 않고 요청을 보내려고하면 NGINX가 content-length, # 411 (길이가 필요함)에 대해 html 오류를 보내고 있습니다. 브라우저와 컬을 사용하여 비슷한 요청을 보내려고하면 모든 것이 정상적으로 작동합니다. 다음 샘플 코드는 다음과 같습니다

request.post(url, function(err, response, data) { 
    if(err) { 
     console.log(err); 
    } else { 
     console.log(data); 
    } 
}).form({'data':'someValue'}) 

또한, 내가 Nginx와는 응답은 Nginx에 도착하기 위해 더 많은 데이터를 기다리는 것 같다 다음, 요청의 헤더에 내용 길이를 추가 해주기 때. NGINX는 요청을 서버로 전달하지 않습니다.

옵션은 내가 요청을 보내는 잘못하고있는 중이 야 어떤 콘텐츠 길이를

var dataObj = {'data' = 'someValue'}; 

var options = { 
    'uri' = url 
    , 'headers' = { 
     'Content-Length' = JSON.stringify(dataObj).length 
    } 
}; 


    request.post(options, function(err, response, data) { 
     if(err) { 
      console.log(err); 
     } else { 
      console.log(data); 
     } 
    }).form({'data':'someValue'}); 

을 포함하는 추가?

답변

2

해결책을 찾았습니다. JSON 데이터를 보내고 있습니다. 실수는 내가 헤더를 "Content-type : application/x-www-form-urlencoded; charset = utf-8"로 설정하는 form() 함수를 사용하고 있었다는 것입니다. Request documentation

형태에서 인용 -이 있지만 값 쿼리 문자열 표현으로 몸을 설정 및 콘텐츠 유형에 추가 할 객체 전달 될 때 : 애플리케이션 /x-www-form-urlencoded로; charset = utf-8 헤더. 을 전달하면 FormData 인스턴스가 반환되어 요청으로 파이프됩니다. auth - 값을 포함한 해시 사용자 || 사용자 이름, 암호 || 을 전달하고 sendImmediately (선택 사항). 위의 문서를 참조하십시오. json - 은 본문을 값으로 JSON 표현으로 설정하고 Content-type : application/json 헤더를 추가합니다. 또한 응답 본문을 json으로 구문 분석합니다.

json 옵션을 사용하고 form() 기능을 제거하면 올바르게 작동하기 시작합니다.