我正在开发一个使用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'});
发送请求时我做错了什么?
答案 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()
功能后,它开始正常运行。