2014-09-23 198 views
4

我试图安装一个代理从我的应用程序的特定路径明确的应用程序的根路径http-proxy文档,但我一直用路径/路由打墙。我正在尝试在已登录的快速应用程序中执行此操作,以便我可以在应用程序后面利用我的身份验证,并尝试进行代理。我不断收到代理应用程序发出的错误消息,说道路径'/ some/route'未定义...等。如何代理根路径与节点的http代理

var httpProxy = require('http-proxy'); 
var proxy = httpProxy.createProxyServer({}); 

proxy.proxyRequest(req, res, { 
    host:'localhost', 
    port:8000 
}); 

我也试过:

var url = 'http://localhost:8000/'; 
var httpProxy = require('http-proxy'), 
    proxy = httpProxy.createProxyServer({}); 

proxy.web(req,res, { target: url }, function(e) { 
    console.log('proxy.web callback'); 
    console.log(e); 
}); 

的函数调用,但我最终明确404错误...

我也想在如果某些变量传递是可能的,例如:

http://my-domain.com/some/route?var1=something&var2=something --> http://another-domain:8000/?var1=something&var2=something 

但无法弄清楚,如果这是可能的,我试图设置它该请求自发送到proxyRequest以来,但无法在第二个应用程序中找到它们。

+0

不知道。 'http-proxy'已经失去了很多时间。我正在使用** nginx **。你可以看看[Redbird](https://github.com/OptimalBits/redbird)。看起来不错... – hgoebl 2014-09-23 20:21:07

回答

2

嗯,我遇到了另一个问题,但首先需要解决这个问题。我想出了这个代码,这对我来说工作得很好;)

就用这个“/一些/路径”

.... // your stuff 

httpProxy.on('error', function (err, req, res) { 
    res.writeHead(500, { 
     'Content-Type': 'text/plain' 
    }); 
    res.end('some error'); 
}); 

app.all('/some/route/*' , function(req , res) { 

     var url = req.url; 
     url = url.slice(11); // to remove "/some/route" 

     req.url = url; 

     return httpProxy.web(req, res , { target: "http://another-domain:8000" }); 

}); 

希望这会有所帮助。

4

不,你不能只用node-http-proxy

但它可能与http-proxy-middleware(你可能会使用它的话):

comment by @chimurai on github

您可以重写与pathRewrite option路径。

var options = { 
    target: 'http://test.com', 
    changeOrigin: true, 
    pathRewrite: {'^/api' : ''}  // <-- this will remove the /api prefix 
}; 

server.middleware = proxyMiddleware('/api', options); 

如果你来到这里,因为你使用webpack-dev-server,请注意,它也内部使用http-proxy-middleware,从2.0.0-beta版本(see PR)开始。

注意:还有一个节点代理插件http-proxy-rules,所以如果你不需要中间件,你可以使用这个插件。

+0

“如果你来这里是因为你使用的是webpack-dev-server”+1 +1 !!! – mtyson 2016-07-29 00:00:56