Skip to content

body-parser 核心功能实现

项目概述

本项目手写实现了一个轻量级的 body-parser 中间件,支持 JSON、URL-encoded 和文本格式的请求体解析。

项目结构

body-parser-core/
├── package.json
├── src/
│   ├── index.js          # 主入口
│   ├── parsers/
│   │   ├── json.js      # JSON 解析器
│   │   ├── urlencoded.js # URL-encoded 解析器
│   │   └── text.js      # 文本解析器
│   └── utils/
│       ├── read.js       # 请求体读取工具
│       └── typeis.js    # 类型检查工具
└── test/
    ├── json.test.js
    ├── urlencoded.test.js
    └── text.test.js

安装

bash
npm install

使用

JSON 解析

javascript
const bodyParser = require('./src/index.js');
const http = require('http');

const server = http.createServer((req, res) => {
  bodyParser.json()(req, res, () => {
    console.log(req.body);
    res.end(JSON.stringify(req.body));
  });
});

server.listen(3000);

URL-encoded 解析

javascript
bodyParser.urlencoded({ extended: true })(req, res, () => {
  console.log(req.body);
  res.end(JSON.stringify(req.body));
});

文本解析

javascript
bodyParser.text()(req, res, () => {
  console.log(req.body);
  res.end(req.body);
});

运行测试

bash
npm test

核心功能

1. JSON 解析器

解析 application/json 格式的请求体。

2. URL-encoded 解析器

解析 application/x-www-form-urlencoded 格式的请求体。

3. 文本解析器

解析 text/plain 格式的请求体。

4. 大小限制

支持请求体大小限制,防止恶意请求。

5. 类型检查

根据 Content-Type 自动选择合适的解析器。

可扩展功能点

1. 多部分表单支持

实现 multipart/form-data 格式的解析:

javascript
// TODO: 实现多部分表单解析
function multipartParser(options) {
  return function (req, res, next) {
    // 解析 multipart/form-data
  };
}

2. 压缩支持

支持压缩的请求体:

javascript
// TODO: 实现压缩支持
function decompress(req, res, next) {
  // 解压缩请求体
  next();
}

3. 流式解析

实现真正的流式解析,减少内存占用:

javascript
// TODO: 实现流式解析
function streamParser(req, res, next) {
  // 流式解析请求体
  next();
}

4. 自定义解析器

支持自定义解析器:

javascript
// TODO: 实现自定义解析器
function customParser(type, parser) {
  return function (req, res, next) {
    // 自定义解析逻辑
  };
}

5. 验证函数

增强验证函数的功能:

javascript
// TODO: 实现增强验证
function validate(req, res, next) {
  // 验证请求数据
  next();
}

相关资源

下一步

完成本课程后,建议继续学习:

  1. cookie-parser - 学习 Cookie 解析
  2. multer - 学习文件上传处理
  3. express-session - 学习会话管理