body-parser处理多层对象的问题
# body-parser 处理多层对象的问题
参考:
https://blog.csdn.net/guzhao593/article/details/83933105
参考:https://www.jianshu.com/p/80b502efe255
# body-parser简介
具体用法可以查看https://www.jianshu.com/p/80b502efe255,这里不做过多解释
body-parser模块是一个Express中间件body-parser是一个HTTP请求体解析中间件- 可以解析 JSON、Raw、文本、URL-encoded 格式的请求体
- 请求体解析后,解析值都会被放到
req.body属性,内容为空时是一个{}空对象。
# 遇到的问题
- 我写接口和前台交互的时候,前台经常是将一个对象或者某个值传递到接口,
body-parser可以很好的将它们转换成key:value的形式,方面获取接收到的值。 - 现在有这么一个需求,我要将一个数组对象传递到接口,并且将对收到的数组对象进行处理并且存储起来。
# 前台发送的值
- 前台发送数据使用的是
application/x-www-form-urlencoded格式,并用qs.stringify处理之后发送 - 发送的数据

# 后端接收到的值
- 后端使用
body-parser处理接收的数据,使用bodyParser.json格式 - 此时接收到的值

- 这不是我们想要的结果
# 解决
通过查找资料发现,body-parser只能处理对象的一层,如果对象有多层,也只处理第一层,而仅凭body-parser是没办法解决的,所以我们需要一个可以处理多层的工具,这里我使用了qs模块
- 引入
qs
// 引入qs模块
const qs = require('qs')
1
2
2
- 使用:
body-parser可以不用改,仅仅将req.body用qs.parse()解析就可以结果
console.log(qs.parse(req.body))
1
结果

这样我们得到了我们想要的数据,也许还有其他的方法,这里没有继续深入挖掘。
上次更新: 2021/09/13, 15:11:59