如何使用节点http-proxy来代理根path

我正在尝试使用快速应用程序将代理设置为来自应用程序中特定path的根path:

http://my-domain.com/some/route --> http://another-domain:8000/ 

我已经尝试了多个HTTP代理文档的东西,但我一直打到path/路由的墙上。 我试图在一个login的快速应用程序内做到这一点,以便我可以利用我的身份validation背后的应用程序我试图代理了。 我一直得到代理的应用程序错误,说path'/一些/路线'没有定义…等。

 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错误…

如果可能的话,我还想传递一些variables,例如:

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

但无法弄清楚,如果这是可能的,我试图设置它的请求,因为这是被发送到proxyRequest,但无法find他们在第二个应用程序。

不,你不能用node-http-proxy来做到这一点。

但是使用http-proxy-middleware可能的(你可能已经使用过了):

来自@chimurai在github上的评论 :

您可以使用pathRewrite选项重写path。

 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 ( 参见PR )。

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

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

只是用这个“/一些/路线”

 .... // 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" } ); } ); 

希望这可以帮助。