試圖通過製作一個簡單的http代理服務器來了解關於node.js的更多信息。使用場景很簡單:用戶 - >代理 - >服務器 - >代理 - >用戶簡單的node.js代理通過將http服務器管道到http請求
以下代碼可用,直到最後一步。無法找到管道連接器的輸出回到用戶的方式。
#!/usr/bin/env node
var
url = require('url'),
http = require('http'),
acceptor = http.createServer().listen(3128);
acceptor.on('request', function(request, response) {
console.log('request ' + request.url);
request.pause();
var options = url.parse(request.url);
options.headers = request.headers;
options.method = request.method;
options.agent = false;
var connector = http.request(options);
request.pipe(connector);
request.resume();
// connector.pipe(response); // doesn't work
// connector.pipe(request); // doesn't work either
});
使用tcpflow我看到來自瀏覽器的傳入請求,然後傳出代理請求,然後服務器響應回代理。不知何故,我無法將重新傳輸回瀏覽器。
用管道實現這個邏輯的正確方法是什麼?
-1,因爲:stream.js:94 拋兒; //管道中未處理的流錯誤。 ^ 錯誤:連接ECONNREFUSED at errnoException(net.js:901:11) at Object.afterConnect [as oncomplete](net.js:892:19) –
@rob,很可能這個例子不適用於新的Streams2 API。 Streams2在節點0.9中作爲beta引入,並在0.10分支中穩定運行。 0.10於2013年3月發佈 - 本次討論後的幾個月。所以,如果你真的想要更有建設性,而不是把-1s,適應新的API的例子。 –
@NikolaiGorchilov上面的例子在節點0.10.13中爲我工作。只有改變我不得不做的是'response.writeHead'而不是'response.writeHeader' – Gireesh