Nodejs教程07:處理接收到的POST資料

LeeChen發表於2019-02-28

閱讀更多系列文章請訪問我的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)
複製程式碼

相關文章