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:
')
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()
    })
})
原文地址:https://www.cnblogs.com/lvlisn/p/14902867.html