Nhận dữ liệu nội dung yêu cầu HTTP bằng Node

Tìm hiểu cách trích xuất dữ liệu được gửi dưới dạng JSON thông qua phần thân yêu cầu HTTP bằng Node

Đây là cách bạn có thể trích xuất dữ liệu được gửi dưới dạngJSONtrong phần thân yêu cầu.

Nếu bạn đang sử dụng Express, điều đó khá đơn giản: sử dụngbody-parserMô-đun nút.

Ví dụ: để lấy nội dung của yêu cầu này:

const axios = require('axios')

axios.post(’/todos’, { todo: ‘Buy the milk’, })

Đây là mã phía máy chủ phù hợp:

const bodyParser = require('body-parser')

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

app.use(bodyParser.json())

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

Nếu bạn không sử dụng Express và bạn muốn thực hiện việc này trong vanilla Node, tất nhiên bạn cần phải làm nhiều việc hơn một chút, vì Express tóm tắt rất nhiều điều này cho bạn.

Điều quan trọng cần hiểu là khi bạn khởi tạo máy chủ HTTP bằng cách sử dụnghttp.createServer(), lệnh gọi lại được gọi khi máy chủ nhận tất cả các tiêu đề HTTP, nhưng không phải nội dung yêu cầu.

Cácrequestđối tượng được truyền trong cuộc gọi lại kết nối là mộtsuối.

Vì vậy, chúng ta phải lắng nghe nội dung cơ thể được xử lý và nó được xử lý theo từng phần.

Trước tiên, chúng tôi lấy dữ liệu bằng cách nghe luồngdatasự kiện và khi dữ liệu kết thúc, luồngendsự kiện được gọi, một lần:

const server = http.createServer((req, res) => {
  // we can access HTTP headers
  req.on('data', (chunk) => {
    console.log(`Data chunk available: ${chunk}`)
  })
  req.on('end', () => {
    //end of data
  })
})

Vì vậy, để truy cập dữ liệu, giả sử chúng ta mong đợi nhận được một chuỗi, chúng ta phải đặt nó vào một mảng:

const server = http.createServer((req, res) => {
  let data = []
  req.on('data', (chunk) => {
    data.push(chunk)
  })
  req.on('end', () => {
    JSON.parse(data).todo // 'Buy the milk'
  })
})

Tải xuống miễn phí của tôiSổ tay Node.js


Các hướng dẫn nút khác: