閱讀更多系列文章請訪問我的GitHub部落格,示例程式碼請訪問這裡。
處理POST資料
示例程式碼:/lesson07/server.js
POST資料量通常較大,通常不會一次性從客戶端傳送到服務端,具體每次傳送的大小由協議,以及客戶端與服務端之間的協商決定。
因此,Nodejs在處理POST資料時,需要通過request物件的data事件,獲取每次傳輸的資料,並在end事件呼叫時,處理所有獲取的資料。
request物件是一個http.IncomingMessage 類,而它實現了可讀流介面,因此具有了可讀流的data、end等事件。
需要注意的是,data事件中傳入的引數是Buffer,Buffer只是一個二進位制的資料,它有可能只是一段字串資料,也有可能是檔案的一部分,所以處理Buffer資料的時候要注意這一點。
const http = require('http')
const querystring = require('querystring')
const server = http.createServer((req, res) => {
let bufferArray = [] // 用於儲存data事件獲取的Buffer資料。
req.on('data', (buffer) => {
bufferArray.push(buffer) // 將Buffer資料儲存在陣列中。
})
req.on('end', () => {
// Buffer 類是一個全域性變數,使用時無需 require('buffer').Buffer。
// Buffer.concat方法用於合併Buffer陣列。
const buffer = Buffer.concat(bufferArray)
// 已知Buffer資料只是字串,則可以直接用toString將其轉換成字串。
const post = querystring.parse(buffer.toString())
console.log(post)
})
})
server.listen(8080)
複製程式碼