2013-02-16 127 views
2

我正在開發一個Web客戶端,它使用Node.js's request module請求服務器。發送的請求是POST請求。服務器使用Express以Node.js編寫。還有一層NGINX作爲代理並將請求重定向到Node.js中寫入的服務器。Node.js請求模塊+ NGINX

問題是: 每當我嘗試發送請求時,如果沒有明確定義任何頭文件,NGINX將發送內容長度爲#411的錯誤(長度要求)。當我嘗試使用瀏覽器和捲曲發送類似的請求時,一切正常。示例代碼如下:

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數據。錯誤是我正在使用form()函數,它將標題設置爲「Content-type:application/x-www-form-urlencoded; charset = utf-8」。從Request documentation

形式引用 - 當傳遞的對象,這將設置主體,但可以的值的查詢字符串 表示,並增加了內容類型: 應用/ X WWW的窗體-urlencoded; charset = utf-8頭。當通過 無選項時,將返回將被傳送到 請求的FormData實例。 auth - 包含值爲用戶||的哈希用戶名,密碼|| 通過,並sendImmediately(可選)。參見上面的文檔。 json - 設置主體,但是以JSON表示值並添加Content-type: application/json頭。此外,解析響應正文爲 json。

一旦我使用json選項,並刪除form()函數,它開始正常工作。