Получить данные тела HTTP-запроса с помощью Node

Узнайте, как извлечь данные, отправленные в формате JSON через тело HTTP-запроса, с помощью Node.

Вот как вы можете извлечь данные, которые были отправлены какJSONв теле запроса.

Если вы используете Express, это довольно просто: используйтеbody-parserУзловой модуль.

Например, чтобы получить тело этого запроса:

const axios = require('axios')

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

Это соответствующий код на стороне сервера:

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) })

Если вы не используете Express и хотите сделать это в vanilla Node, вам, конечно, нужно проделать немного больше работы, поскольку Express многое из этого абстрагирует за вас.

Важно понимать, что при инициализации HTTP-сервера с помощьюhttp.createServer()обратный вызов вызывается, когда сервер получает все заголовки HTTP, но не тело запроса.

Вrequestобъект, переданный в обратном вызове соединения, являетсятранслировать.

Итак, мы должны прослушивать содержимое тела, которое будет обработано, и оно обрабатывается фрагментами.

Сначала мы получаем данные, слушая потокdataсобытия, а когда данные заканчиваются, потокendсобытие вызывается один раз:

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
  })
})

Итак, чтобы получить доступ к данным, предполагая, что мы ожидаем получить строку, мы должны поместить ее в массив:

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'
  })
})

Скачать мою бесплатнуюСправочник по Node.js


Дополнительные руководства по узлам: