【问题标题】:Do a PUT request via proxy using Node JS and request package使用 Node JS 和请求包通过代理执行 PUT 请求
【发布时间】:2021-05-24 04:34:42
【问题描述】:

我有一个在本地计算机上的网络服务器上运行的网络应用程序(使用 AngularJS)。我需要使用我的 NodeJS 服务器执行 AJAX REST 请求,并将其代理到异地的另一台服务器。所有GET 请求都可以使用request 包顺利完成。但是我的推杆是空的。

GET 请求使用以下管道传输:

$request.get(apiUrl+req.url).pipe(res);

而且效果很好。

我的空PUT 请求看起来像这样:

$request.put(apiUrl+req.url).pipe(req);

我已验证 PUT 请求已使用 Wireshark 发送到所需的 REST API。不知何故,我想不通管道应该怎么做。我从 REST 服务器得到答案,我的身体不能是 null

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

完整代码在这里,节点服务器检查我们是否使用地址 /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;
}

【问题讨论】:

    标签: javascript node.js http rest request


    【解决方案1】:

    您似乎没有使用您的PUT 发送任何数据,因为服务器响应消息称您的正文不能是null。 由于您是代理,请尝试通过 API 将您的原始请求传送到响应中,如 https://github.com/mikeal/request#streaming 中所述

    req.pipe($request(apiUrl + req.url)).pipe(res)
    

    【讨论】:

    • 我试过了。该行确实适用于 GET 请求,但不适用于 PUT 请求。还有其他想法吗?
    • 尽量不要依赖管道魔法,而是手动设置您的请求,如github.com/mikeal/request#examples 之类的标头和请求正文有时天真的管道方法会留下混淆 API 的标头或无法正确发送数据.我也曾经用request 构建了一个代理,而管道——虽然很优雅——却造成了很多麻烦。
    • 你的客户有没有身体?
    • 是的,NodeJS 服务器能够呈现 req.body,它是所需的主体。但是,我无法建立自己的请求,可以帮助任何人吗?
    猜你喜欢
    • 1970-01-01
    • 2014-08-25
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    • 2014-11-25
    • 2012-11-26
    • 2012-07-16
    • 1970-01-01
    相关资源
    最近更新 更多