2012-06-21 68 views
1

我們在node.js中問題管道在node.js中

var http = require('http'); 
http.createServer(function(request, response) { 
    var proxy = http.createClient(8083, '127.0.0.1') 
    var proxy_request = proxy.request(request.method, request.url, request.headers); 
    proxy_request.on('response', function (proxy_response) { 
     proxy_response.pipe(response); 
     response.writeHead(proxy_response.statusCode, proxy_response.headers); 
    }); 

    setTimeout(function(){ 
     request.pipe(proxy_request); 
    },3000); 
}).listen(8081, '127.0.0.1'); 

的例子聽請求127.0.0.1:8081,並將其發送到虛擬服務器下面的例子(總是返回200個OK狀態代碼)在127.0.0.1:8083。

問題是在輸入流(可讀)和輸出流(可寫)之間的管道中,當我們有一個異步模塊之前(在這種情況下setTimeOut時間)。管道不起作用,並且沒有任何信息發送到8083端口的虛擬服務器。

也許,當我們在管道調用之前有一個異步調用(在這個例子中是setTimeOut)時,輸入流變爲狀態「不可讀」,並且在異步調用之後管道不發送任何東西。

這僅僅是一個例子......我們與node.js的社會上更多的異步模塊具有相同的結果(ldapjs等)測試...

我們嘗試與修復: - 請求.readable = true; //管道調用前 - request.pipe(proxy_request,{end:false}); 具有相同的結果(管道不工作)。

任何人都可以幫助我們嗎?

+0

管道肯定工作在節點。我在我自己的項目的幾個地方使用它們。有很好的示例說明如何在流中的節點文檔中使用以及在請求模塊文檔中使用 – ControlAltDel

+0

您和我肯定似乎有相同的問題:http://stackoverflow.com/questions/11182725/http-request-stream - 不可讀的請求外處理程序 –

回答

0

我相信這是從0.8.0開始的。我沒有嘗試在0.6.11+

+0

我會在0.8.0中測試它。謝謝 – alvaizq