1. 程式人生 > 實用技巧 >nodejs.cn-Node.js-入門教程:使用 Node.js 獲取 HTTP 請求的正文資料

nodejs.cn-Node.js-入門教程:使用 Node.js 獲取 HTTP 請求的正文資料

ylbtech-nodejs.cn-Node.js-入門教程:使用 Node.js 獲取 HTTP 請求的正文資料

1.返回頂部
1、

使用 Node.js 獲取 HTTP 請求的正文資料

這是在請求正文中提取以 JSON 格式傳送的資料的方式。

如果使用的是 Express,則非常簡單:使用body-parserNode.js 模組

例如,獲取此請求的正文:

const axios = require('axios')

axios.post('http://nodejs.cn/todos', {
  todo: '做點事情'
})

這是對應的伺服器端程式碼:

const bodyParser = require('body-parser')

app.use(
  bodyParser.urlencoded({
    extended: true
  })
)

app.use(bodyParser.json())

app.post('/todos', (req, res) => {
  console.log(req.body.todo)
})

如果不使用 Express 並想在普通的 Node.js 中執行此操作,則需要做多一點的工作,因為 Express 抽象了很多工作。

要理解的關鍵是,當使用http.createServer()

初始化 HTTP 伺服器時,伺服器會在獲得所有 HTTP 請求頭(而不是請求正文時)時呼叫回撥。

在連接回調中傳入的request物件是一個流。

因此,必須監聽要處理的主體內容,並且其是按資料塊處理的。

首先,通過監聽流的data事件來獲取資料,然後在資料結束時呼叫一次流的end事件:

const server = http.createServer((req, res) => {
  // 可以訪問 HTTP 請求頭
  req.on('data', chunk => {
    console.log(`可用的資料塊: ${chunk}`)
  })
  req.on('end', () => {
    //資料結束
  })
})

因此,若要訪問資料(假設期望接收到字串),則必須將其放入陣列中:

const server = http.createServer((req, res) => {
  let data = []
  req.on('data', chunk => {
    data.push(chunk)
  })
  req.on('end', () => {
    JSON.parse(data).todo // '做點事情'
  })
})
2、
2.返回頂部
3.返回頂部
4.返回頂部
5.返回頂部
1、 http://nodejs.cn/learn/get-http-request-body-data-using-nodejs 2、
6.返回頂部
作者:ylbtech
出處:http://ylbtech.cnblogs.com/
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。