手动模拟一个类似于express.urlencoded这样的中间件,来解析POST提交到服务器的表单数据
-
定义中间件
-
监听req的data事件
-
监听req的end事件
-
使用querystring模块解析请求体数据
-
讲解洗出来的数据对象挂碍为req.body
-
将定义中间件封装为模块
// node.js内置了一个querystring模块,用来专门处理处理查询字符换,通过这个模块提供的parse()函数,可以轻松吧查询字符串解析成对象的格式
custom-body-parse模块完整代码
const qs = require('querystring')
const bodyParser = (req, res, next) => {
// 1.定义变量用来存出客户端发送过来的请求体
let str = ''
// 2.监听req的data事件 来获取客户端发送到服务器的数据
// 如果数据量比较大,无法一次发送完毕,客户端会把数据切割分批次送到服务器,可能多次触发
req.on('data', (chunk) => {
str += chunk
})
// 3.监听req的end事件 当请求体接受完毕以后,会自动触发req的end事件
req.on('end', () => {
// 在str中存放的是完整的请求体数据了
console.log(str);
// 4.解析字符串变成对象
const body = qs.parse(str)
console.log(body);
// 5.挂载到req.body
req.body = body
})
}
module.exports = bodyParser
使用
const express = require('express')
const app = express()
// 引入
const costomBodyParser = require('./25.custom-body-parse')
// 使用
app.use(costomBodyParser)
app.post('/use', (req, res) => {
res.send(req.body)
})
app.listen(80, () => {
console.log('http://127.0.0.1');
})