使用Node获取HTTP请求主体数据

了解如何使用Node提取通过HTTP请求正文以JSON格式发送的数据

这是您可以提取作为以下内容发送的数据的方法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,而您想在普通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手册


更多节点教程: