注意:我的问题可能与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的解决方案似乎表明我需要包含其他条件。没有或没有一个,它不会炒。
感谢您的帮助!
答案 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);