zoukankan      html  css  js  c++  java
  • 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()
        })
    })
  • 相关阅读:
    动态规划 01背包问题
    日常水题 蓝桥杯基础练习VIP-字符串对比
    本博客导航
    2019 ICPC 南昌 (C E G L)
    [模板]线段树
    [模板]手写双端队列(或普通队列)
    2019 ICPC Asia Yinchuan Regional (G, H)
    与超级源点与超级汇点相关的两题POJ 1062, HDU 4725
    [模板]链式向前星
    [总结]关于反向建图
  • 原文地址:https://www.cnblogs.com/lvlisn/p/14902867.html
Copyright © 2011-2022 走看看