node.js 接收post请求的第三方依赖 body-parser中间件(弃用)
在express中对get请求内置了req.query来获取请求数据,对post请求,需要配合使用body-parser中间件来获取
示例(来源于文档说明)
var express = require('express') var bodyParser = require('body-parser') var app = express() // parse application/x-www-form-urlencoded app.use(bodyParser.urlencoded({ extended: false })) // parse application/json app.use(bodyParser.json()) app.use(function (req, res) { res.setHeader('Content-Type', 'text/plain') res.write('you posted:\n') res.end(JSON.stringify(req.body, null, 2)) })
现已弃用,可以直接调用express
// parse application/x-www-form-urlencoded app.use(express.urlencoded({ extended: false })) // parse application/json app.use(express.json()) app.use(router)
不需要安装和引入body-parser了,要记得一定在引入路由之前配置
自己封装实现body-parser中间件
const qs=require('qs) //解析处理表单POST请求体中间件 自己封装 app.use((req,res,next)=>{ //由于表单POST请求可能携带大量的数据,所以在精选请求提交的时候会分多次提交 //具体分多少次精选提交不一定,取决于数据量的大小 //在Node中,对于处理这种不确定的数据,使用事件的形式处理 //这里通过监听req对象的data时间,然后通过对于的回调处理函数中的参数chunk拿到每一个data的数据 // data事件出发多少次不一定 //当时间接受完毕之后,会自动触发req对象的end事件中使用接受到表单POST请求体 let data=''; req.on('data',(chunk)=>{ data+=chunk; }) req.on('end',()=>{ //手动给req对象挂在一个body属性,值就是当前表单POST请求体对象 //在后续的处理中间件中,就可以直接使用req.body了 //因为在同一个请求体中,流通的都是同一个req和res对象 req.body=qs.parse(data); next() }) })