Get HTTP request body data usando Node.js
Aqui temos como você pode extrair dados que foram enviados como JSON no corpo da requisição:
Se você está usando Express, é bem simples: utilize o módulo body-parser
.
Por exemplo, para obter o corpo dessa requisição:
const axios = require('axios')axios.post('https://whatever.com/todos', {todo: 'Buy the milk'})
Esse é o código do servidor que vai receber a requisição:
const express = require('express')const app = express()app.use(express.urlencoded({extended: true}))app.use(express.json())app.post('/todos', (req, res) => {console.log(req.body.todo)})
Se você não está usando Express, e você quer fazer isso em Node.js raiz, terá um pouco mais de trabalho, é claro, pois o Express abstrai muitas coisas pra você.
O ponto chave pra se entender é que quando você inicializa um servidor HTTP usando http.createServer()
, a callback é chamada quando o servidor obtêm todos os cabeçalhos HTTP, mas não o body (corpo da requisição).
O objeto request
passado na conexão de callback é uma stream.
Então, nós devemos escutar pelo conteúdo do body a ser processado, e ele é processado em chunks(pedaços).
Primeiro nós obtemos os dados escutando os eventos de data
da stream, e quando eles finalizam, a stream emite o evento end
:
const server = http.createServer((req, res) => {// nós podemos acessar os cabeçalhos HTTPreq.on('data', chunk => {console.log(`Data chunk available: ${chunk}`)})req.on('end', () => {// fim dos eventos data})})
Então para acessar os dados, assumindo que esperamos receber uma string, nós devemos colocá-los em um array:
const server = http.createServer((req, res) => {let data = '';req.on('data', chunk => {data += chunk;})req.on('end', () => {JSON.parse(data).todo // 'Buy the milk'})})