HTTP代理使用节点连接

时间:2014-02-24 06:47:31

标签: javascript node.js http proxy reverse-proxy

注意:我的问题可能与this question非常相似,但解决方案对我不起作用。

我的问题和原版海报一样。我需要访问外部资源,我需要代理它来解决跨域安全限制。我还引用了这个示例博客文章:http://nthloop.com/blog/local-dev-with-nodejs-proxy/

代理正在加载外部资源(在网址中包含'cgi'的任何内容)。但是使用这个代码,我无法通过connect模块访问本地(静态)文件。超时,没有错误消息等......

我发布了我的server.js文件的完整代码:

var httpProxy = require('http-proxy');
var connect = require('connect');
var endpoint  = {
      host:   '11.0.0.120',
      port:   8081
    };

var proxy = new httpProxy.RoutingProxy();
var app = connect()
    .use(function(req, res) {
        if (req.url.indexOf('cgi') >= 0) {
            proxy.proxyRequest(req, res, endpoint);
        } else {connect.static(__dirname)};
    })
    .use(connect.static(__dirname))
    .listen(8182);

This question的解决方案似乎表明我需要包含其他条件。没有或没有一个,它不会炒。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

您可以使用next()让请求流向下一个中间件 -

var app = connect()
    .use(function(req, res, next) {
        if (req.url.indexOf('cgi') >= 0) {
            proxy.proxyRequest(req, res, endpoint);
        } else {
            next();
        )};
    })
    .use(connect.static(__dirname))
    .listen(8182);

答案 1 :(得分:0)

哎呀,只需将use(connect ...)函数交换到第一个调用就可以了。不知道为什么这样做或者它是最好的方法。另外,不需要else语句。

如果有人能给出更好的解释,我可以接受他们的回答。这是我的工作代码:

var httpProxy = require('http-proxy');
var connect = require('connect');
var endpoint  = {
      host:   '11.0.0.120',
      port:   8081
    };

var proxy = new httpProxy.RoutingProxy();
var app = connect()
    .use(connect.static(__dirname))
    .use(function(req, res) {
        if (req.url.indexOf('cgi') >= 0) {
            proxy.proxyRequest(req, res, endpoint);
        }
    })
    .listen(8182);