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()
        })
    })
  • 相关阅读:
    TRansportation ANalysis and SIMulation System
    源数据的换行符
    小学生的加减乘除
    ORDER BY today_used ASC' % (MAX_USED_TIMES)
    线程污染 重复请求
    SQLite支持的并发访问数
    数组和链表的对比
    第一类 第二类 反向 螺旋 数学归纳法
    阶乘
    api 爬虫 避免相同 input 在信息未更新 情况下 重复请求重复
  • 原文地址:https://www.cnblogs.com/lvlisn/p/14902867.html
Copyright © 2011-2022 走看看