2013-02-16 100 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()函数,它开始正常工作。

相关问题