代码之家  ›  专栏  ›  技术社区  ›  user4445419

代理节点请求新端口并充当反向代理

  •  17
  • user4445419  · 技术社区  · 11 年前

    我需要创建一个应用程序,将请求从端口a代理到端口B。 例如,如果用户在端口3000上连接,他将被路由(在引擎罩下)到端口3001,因此“原始”应用程序将在端口3001上运行,但在客户端(浏览器)中,用户将放置端口3000。 不重定向。。。

    http://example.com:3000/foo/bar

    将创建一个新的服务器,它监听端口3001,所有的呼叫实际上都是到端口3000的。 既然端口3000实际上被我的反向代理应用占用了?我该如何测试它。。。

    是否有方法对此进行测试以验证其是否有效,例如通过单元测试?

    我找到了这个模块 https://github.com/nodejitsu/node-http-proxy 这可能会有所帮助。

    2 回复  |  直到 11 年前
        1
  •  8
  •   brandonscript    11 年前

    直接从 node-http-proxy docs ,这很简单。您可以简单地通过向端口3000发出HTTP请求来测试它——如果您在端口3001上得到了相同的响应,那么它可以工作:

    var http = require('http'),
        httpProxy = require('http-proxy');
    
    //
    // Create a proxy server with custom application logic
    //
    var proxy = httpProxy.createProxyServer({});
    
    var server = http.createServer(function(req, res) {
      // You can define here your custom logic to handle the request
      // and then proxy the request.
      proxy.web(req, res, {
        // Your real Node app
        target: 'http://127.0.0.1:3001'
      });
    });
    
    console.log("proxy listening on port 3000")
    server.listen(3000);
    

    我强烈建议您使用以下工具编写一套集成测试 对于您的项目也是如此,您可以直接对服务器和代理运行测试。如果测试都通过了,那么可以确保代理的行为符合预期。

    单元测试使用 看起来像这样:

    var should = require('should');
    
    describe('server', function() {
        it('should respond', function(done) {
                                     // ^ optional synchronous callback
            request.get({
                url: "http://locahost:3000"
                                    // ^ Port of your proxy
            }, function(e, r, body) {
                if (e)
                    throw new Error(e);
                body.result.should.equal("It works!");
                done(); // call the optional synchronous callback
            });
        });
    });
    

    然后,您只需运行测试(Mocha安装完成后):

    $ mocha path/to/your/test.js
    
        2
  •  3
  •   brandonscript    11 年前

    您可以通过添加以下内容来验证这是否有效 代理请求(如Remus回答中所述)

    proxy.on('proxyReq', function (proxyReq, req, res, options) {
        res.setHeader('App-Proxy', 'proxy');
    });
    

    通过这种方式,您可以验证您的“原始”调用是否针对新的服务器代理工作,甚至提供创建UT的能力,此外,您还可以使用 changeOrigin:true 所有物

    推荐文章