express 框架body-parser中间件原理解析

本文详细解析了Node.js中Express框架如何通过body-parser中间件处理POST请求体,包括安装配置、原理解析及自定义中间件实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. express 中的 body-parser 中间件

在Express 中没有内置获取表单 post 请求体的API,需要借助中间件的第三方包:body-parser 来获取

安装:

npm install --save body-parser

配置并开启服务:

var express = require('express')
var bodyParser = require('body-parser')
var app = express()
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())

app.post('/post', function (req, res) {
  var comment = req.body
  console.log(comment)
})

//开启服务器
app.listen(3000, () => {
    console.log('success');
});

express 中的 body-parser 中间件 解析获取 post 请求参数:
在这里插入图片描述

2. 自己封装 bodyParser中间件

1. 自己封装 bodyParse 中间件

const querystring = require('querystring');

/*  导出中间件(函数)
    第一个参数:请求对象
    第二个参数:完成回调
        * postObject:post请求参数对象
*/
module.exports = (req, res, next) => {
    /*如果本次请求是post请求,则解析post请求参数,
    并且将解析好的参数对象作为req的属性传递给下一个中间件*/
    if (req.method == 'POST') {
        //1.1 给req注册一个data事件
        let postData = "";
        req.on('data', function (chuck) {
            postData += chuck;
        });
        //1.2给req注册一个end事件
        req.on('end', function () {
            //1.3 使用 querystring模块解析post参数
            let postObjc = querystring.parse(postData);
            //将解析好的参数对象添加到 req 的属性中
            req.body = postObjc;
            //执行下一个中间件
            next();
        });
    }
}

2. app.js 测试:自己写的 bodyParse 中间件依然可以 解析获取 post 请求参数

//导入模块
const express = require('express');
//创建服务器
let app = express();

//导入自己写的 bodyParse.js 中间件
app.use(require('./bodyParse.js'));

app.post('/post', function (req, res) {
  var comment = req.body
  console.log(comment)
})

//开启服务器
app.listen(3000, () => {
    console.log('success');
});

3. bodyParser.js 原理解析

  1. 判断请求为 post 请求,则进行解析。
  2. 因为是 post 请求,传输数据可能会很大,需要一点一点传。创建 postData 变量,存储在变量里面
  3. 使用 querystring模块解析post参数
  4. 将解析好的参数对象添加到req的属性中 req.body
  5. 执行下一个中间件 next()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Q_Q 忙里偷闲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值