Node.js请求模块+ NGINX

时间:2013-02-16 13:34:00

标签: node.js nginx request httprequest

我正在开发一个使用Node.js's request module请求服务器的Web客户端。发送的请求是POST请求。服务器使用Express在Node.js中编写。还有另一层NGINX充当代理并将请求重定向到Node.js中编写的服务器。

问题是: 每当我尝试发送请求时,没有明确定义任何标头,NGINX就会发送内容长度为#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'});

发送请求时我做错了什么?

1 个答案:

答案 0 :(得分:2)

我找到了解决方案。 我正在发送JSON数据。错误是我正在使用form()函数,它将标题设置为“Content-type:application / x-www-form-urlencoded; charset = utf-8”。引自Request documentation

  

form - 当传递一个对象时,这将设置body但是为查询字符串   值的表示并添加内容类型:   应用程序/ x-WWW窗体-urlencoded; charset = utf-8标题。通过时   没有选项会返回将通过管道传递给的FormData实例   请求。 auth - 包含值user ||的哈希用户名,密码||   传递,并发送即时(可选)。见上面的文档。 json -   设置body但值为JSON表示值并添加Content-type:   application / json header。另外,将响应主体解析为   JSON。

使用json选项并删除form()功能后,它开始正常运行。