【问题标题】:How to make external HTTP requests with Node.js [closed]如何使用 Node.js 发出外部 HTTP 请求 [关闭]
【发布时间】:2011-12-19 12:04:57
【问题描述】:

这个问题很简单。我想使用 Node.js 服务器作为代理来记录、验证 HTTP 查询并将其转发到后端 HTTP 服务器(PUT、GET 和 DELETE 请求)。

为此我应该使用什么库?恐怕我找不到。

【问题讨论】:

    标签: http node.js


    【解决方案1】:

    NodeJS 支持 http.request 作为标准模块: http://nodejs.org/docs/v0.4.11/api/http.html#http.request

    var http = require('http');
    
    var options = {
      host: 'example.com',
      port: 80,
      path: '/foo.html'
    };
    
    http.get(options, function(resp){
      resp.on('data', function(chunk){
        //do something with chunk
      });
    }).on("error", function(e){
      console.log("Got error: " + e.message);
    });
    

    【讨论】:

    • 我建议添加resp.setEncoding('utf8');(或您使用的任何编码)以将数据作为 utf8 字符串。如果我理解正确,否则您将获得 Buffer 对象,并且如果将多字节字符拆分为两个块,则最终可能会遇到多字节字符问题。 (刚刚调试了一段时间相关的问题)
    • 我实际上已经开始更多地使用request npm 模块了。
    【解决方案2】:

    node-http-proxy 是一个很好的解决方案,正如上面@hross 所建议的那样。如果您对使用节点没有死心,我们使用NGINX 来做同样的事情。它与节点一起工作得很好。例如,我们使用它来处理 SSL 请求,然后再将它们转发到节点。它还可以处理缓存和转发路由。耶!

    【讨论】:

      【解决方案3】:

      您可以使用内置的http 模块来执行http.request()

      但是,如果您想简化 API,您可以使用 superagent 等模块

      【讨论】:

      • 确实是更明智的 api。我不怪 node 只提供低级 API,但开始处理大块数据只是很烦人。
      【解决方案4】:

      我会结合node-http-proxyexpress

      node-http-proxy 将通过RoutingProxy 支持您的 node.js Web 服务器内的代理(请参阅名为 另一个 http 服务器内的代理请求的示例)。

      在您的自定义服务器逻辑中,您可以使用 express 进行身份验证。请参阅auth sample here for an example

      结合这两个例子应该会给你想要的。

      【讨论】:

        【解决方案5】:

        您可以使用 node.js http 模块来做到这一点。您可以查看Node.js HTTP 的文档。

        您还需要将查询字符串传递给其他 HTTP 服务器。您应该在ServerRequest.url 中拥有它。

        获得这些信息后,您可以在http.request() 中提供的选项中传入后端 HTTP 服务器和端口

        【讨论】:

          猜你喜欢
          • 2019-07-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-11-19
          • 2013-03-24
          • 1970-01-01
          • 2011-06-04
          • 2020-01-29
          相关资源
          最近更新 更多