Javascript 代理节点请求新端口,并像反向代理一样工作

Javascript 代理节点请求新端口,并像反向代理一样工作,javascript,node.js,express,reverse-proxy,node-http-proxy,mocha,should.js,Javascript,Node.js,Express,Reverse Proxy,Node Http Proxy,Mocha,Should.js,我需要创建一个应用程序来代理从端口a到端口B的请求。 例如,如果用户在端口3000上连接,他将被路由(在引擎盖下)到端口3001,因此“原始”应用程序将在端口3001上运行,但在客户端(浏览器)中,用户将放置端口3000。 不重定向 将创建一个新的服务器,该服务器侦听端口3001,所有调用实际上都是对使用新服务器和新端口运行的端口3000的调用。 由于端口3000实际上已被我的反向代理应用程序占用?我应该如何测试它 是否有一种测试方法来验证它是否正常工作,例如通过单元测试 我发现这个模块可能会

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

将创建一个新的服务器,该服务器侦听端口3001,所有调用实际上都是对使用新服务器和新端口运行的端口3000的调用。 由于端口3000实际上已被我的反向代理应用程序占用?我应该如何测试它

是否有一种测试方法来验证它是否正常工作,例如通过单元测试

我发现这个模块可能会有所帮助。

直接从开始,这非常简单。您只需向端口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);
我强烈建议您也为您的项目使用类似的东西编写一套集成测试—通过这种方式,您可以直接针对服务器和代理运行测试。如果测试同时通过,那么您可以确信您的代理的行为符合预期

使用and的单元测试如下所示:

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后):


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


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

您找到了什么模块?到目前为止,您是如何实现这一点的?@doldt-:)谢谢,我添加了模块namenode http proxy,这是一个很好的解决方案。你为什么不确定?(:@num8er我不知道如何测试它,看它是否真的工作了…还有很多选择,所以可以选择哪一个…你是否可以选择使用像nginx或HAproxy这样的东西而不是节点服务器?它们是用来管理这类事情的。谢谢,但我已经在pos中提供的链接中看到了这种逻辑t:),我的问题是如何实际测试/模拟它…(可能是超级测试),我将尝试长话短说:)我需要开发这个代理,并在几周后将其与另一个组件集成,我需要通过一些测试来验证这个概念是否有效。。。由于原始端口已被占用,这很棘手…我想隔离此代码并以某种方式对其进行测试…您能提供帮助吗?谢谢,但我如何做到这一点?您能提供一个如何测试此场景的示例吗?谢谢,但此测试不足以验证它是否正常工作…:),我将呼叫路由到其他端口的位置在哪里?创建服务器…这是我面临的问题,我在这里感到困惑。在服务器前面放置一个代理,然后对其运行测试。如果端口3001上的服务响应,并且测试通过,那么它就可以工作。为了澄清,您的测试是针对代理运行的。代理本质上应该以相同的方式响应针对本机应用程序的调用。当指向代理时,为本机应用程序编写的测试的行为应该相同。如果他们这样做了,那就是成功。如果他们不这样做,那就是失败。
$ mocha path/to/your/test.js
proxy.on('proxyReq', function (proxyReq, req, res, options) {
    res.setHeader('App-Proxy', 'proxy');
});