2015-12-11 19 views
-2

如果使用NodeJS的http服務器功能,請求的類型爲http.IncomingMessage,它實現stream.Readable傳遞給Node.J中的http.IncomingMessage的塊的類型是什麼

Readable發出的數據事件可以具有類型StringBuffer的參數。

對於IncomingMessage,我似乎正在接收數據事件的字符串參數。我不清楚爲什麼,考慮到HTTP身體數據更好地代表Buffer。然而,文件並沒有說明論證的類型。

請問參數的類型總是String,還是有條件(包括,我可以從程序側控制的那些)時,讀取器可發射Buffer參數,而不是?

回答

1

流(http.IncomingMessage)沒有默認編碼,因此您將獲得Buffer對象而不是字符串。如果你打電話.setEncoding(),那麼你得到你指定的任何類型的字符串。

如果你有一個字符串緩衝數據,那麼你當然會看到「字符串數據」追加因爲當時buffer.toString()被隱式調用當您連接的Buffer到您的字符串緩衝區變量。例如:

var buf = ''; 
req.on('data', function(data) { 
    // Here `data.toString()` is called implicitly because you a 
    // non-string object has to be converted somehow in order to be 
    // added to `buf`. When this implicit conversion happens, the result 
    // will be the concatenation of `buf` + `data` converted to a UTF-8 
    // string because that is the default encoding argument for 
    // `buffer.toString()` 
    buf += data; 
    // You can even check that it's a buffer with: 
    console.log(Buffer.isBuffer(data)); 
}); 
+0

ty。我錯過了'.setEncoding()'方法。我將它們看作是「字符串」,因爲我將它們發送到調試,它們看起來像文本,緩衝區通常顯示爲'',但那是因爲串聯。而且無法撤銷'.setEncoding',或者看起來似乎。 –

+0

從技術上講,您可以通過取消設置內部Readable狀態的一部分來移除由'.setEncoding()設置的編碼,但這不是公共API。 – mscdex

相關問題