2014-09-23 200 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