Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用节点JS和请求包通过代理执行PUT请求_Javascript_Node.js_Http_Rest_Request - Fatal编程技术网

Javascript 使用节点JS和请求包通过代理执行PUT请求

Javascript 使用节点JS和请求包通过代理执行PUT请求,javascript,node.js,http,rest,request,Javascript,Node.js,Http,Rest,Request,我有一个webapp(使用AngularJS),它在本地计算机上的Web服务器上运行。我需要使用NodeJS服务器执行ajaxrest请求,并将其代理到另一台非现场服务器。所有的GET请求都可以使用该包顺利通过。但我的推杆是空的 GET请求通过以下管道传输: $request.get(apiUrl+req.url).pipe(res); 而且效果很好 我的空PUT请求如下所示: $request.put(apiUrl+req.url).pipe(req); 我已经使用Wireshark验证了

我有一个webapp(使用AngularJS),它在本地计算机上的Web服务器上运行。我需要使用NodeJS服务器执行ajaxrest请求,并将其代理到另一台非现场服务器。所有的
GET
请求都可以使用该包顺利通过。但我的推杆是空的

GET
请求通过以下管道传输:

$request.get(apiUrl+req.url).pipe(res);
而且效果很好

我的空
PUT
请求如下所示:

$request.put(apiUrl+req.url).pipe(req);
我已经使用Wireshark验证了
PUT
请求是否发送到所需的RESTAPI。不知怎的,我想我不知道该怎么做管道。我从REST服务器得到的答案是,我的身体不能为
null

有什么线索吗?我想这很简单,但我认为请求包上的文档并不是很令人满意

整个代码都在这里,节点服务器将检查我们是否正在使用address/api进行操作

 if(runAsProxy && req.url.indexOf('/api') === 0){
  console.log("this is /api")
  if(req.method ==="PUT"){
     console.log("PUT")
     $request.put(apiUrl+req.url).pipe(res);
     console.log("body: ",req.body)
  }

  else if(req.method === 'GET' || req.method === 'HEAD'){
     $request.get(apiUrl+req.url).pipe(res);

  }
  return;
}

看起来您没有使用
PUT
发送任何数据,因为服务器会以一条消息响应您的身体不能为
null
。 由于您是代理,请尝试通过API将原始请求管道化到响应,如中所述


我试过了。该行可以处理GET请求,但不能处理PUT请求。还有其他想法吗?试着不要依赖管道魔法,用头和请求体手动设置请求,就像有时天真的管道方法留下的头会混淆API或无法正确发送数据一样。我还曾经用
请求
构建了一个代理,管道虽然很优雅,但却造成了很多麻烦。您的客户端是否有一个主体?是的,NodeJS服务器能够呈现req.body,它是所需的主体。但是,我无法建立自己的请求,是否可以帮助任何人?
req.pipe($request(apiUrl + req.url)).pipe(res)