2012-08-14 87 views
2

我期待着寫一個建立在node-http-proxy之上的NPM模塊,但增加了緩存支持,比如魷魚/清漆,但是在node.js中。在發送到瀏覽器之前過濾node.js響應(標題和正文)?

在我的頭,它的工作是這樣的:

  • 我的NPM模塊將不依賴於HTTP代理,以將只是「打包」提供給http.createServer任何回調。這個想法是你將它與http-proxy結合起來,但它並不假設。
  • 它會查看req,如果它有一個緩存版本,它將提供該服務。
  • 如果沒有,它將委託給原始回調,檢查響應以查看它是否可以被緩存。
  • 緩存發生,並返回實際響應。

這個邏輯非常直截了當,但我對node.js內部和概念不是很熟悉,而且我很努力想弄清楚如何獲取響應的內容。

考慮這個例子:

var http = require('http'); 

http.createServer(function(req, res) { 
    res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' }) 
    res.write('Hello World!'); 
    res.end(); 
}).listen(80); 

如何我會從響應對象獲取的數據?理想情況下,我只是'觀察'響應並處理寫入數據的數據,而不是回溯地將數據從數據中取出。

我試着這樣做:

res.on('data', function(chunk) { 
    console.log('Data written: ' + chunk); 
}); 

但似乎永遠不會被調用。

我然後設法:

res.connection.on('data', function(chunk) { 
    console.log('Data written: ' + chunk); 
}); 

但是,這只是把請求數據,不響應數據。如果您對響應的產生方式一無所知,那麼過濾響應數據的正確方法是什麼?

如果我表達我完全不理解節點,並且應該閱讀某種「Node.js概念的新手指南」,請直接告訴我這一點。我不是懶惰,我只是迷失了。

編輯|看起來我可以在方法上調用write()writeHead()來攔截對它們的調用,但是這種感覺是錯誤的。

回答

1

看起來像redifinition寫和寫的方法ServerResponse的唯一辦法。 Node API沒有處理外發數據的本地事件。

+0

現在玩這個方法,謝謝。它不會像我想的那樣混亂。 – d11wtq 2012-08-14 13:32:56

1

最簡單和最有效的方法是用您的自定義功能取代這些功能。當通過myhttp.createServer創建http服務器時,您可以撥打http.createServer並攔截function(req, res)回撥。用您的包裝調用原始的res對象替換res。但是您可以添加邏輯來記錄res.writeHead調用。

+0

看起來像ServerResponse有很多方法來定義我是否要製作一個真正的包裝器,所以最好的方法是調整所需的方法(即,重新定義它們)。感謝提供我自己的createServer()實現,它只是委託給http.createServer()。這很有用。 – d11wtq 2012-08-14 12:59:54

相關問題