node如何接收ajax post方式传来的json类型数据

最近学了node,对于post请求的数据都是用body-parser中间件进行处理,但是今天用ajax传数据的时候发生了错误,错误如下:
这里写图片描述

传过来的值直接被解析成一个key,改了好久才解决,所以把这个问题记录一下

1.form表单提交时

初入门node的同学(比如我),刚开始知道body-parser的时候都只知道这样用
这里写图片描述

然后接受post请求的数据通过req.body
node如何接收ajax post方式传来的json类型数据_第1张图片

这样传过来的数据就会被解析成一个json数据赋值到req.body让我们使用

前台表单
node如何接收ajax post方式传来的json类型数据_第2张图片

接收到的数据打印出来就是完美的json格式
这里写图片描述

但是当通过ajax post传过来的数据就会出现我所说的错误,数据被识别为一个key值
这里写图片描述

这是因为body-parser的urlencoded方法顾名思义就是把传来的数据当做url来处理,也就是像querystring一样,所以对于传过来的json数据,没有识别到切割key和value的标志,就把所有都当做key来处理

2.ajax提交json数据

对于ajax,我们一般都使用post方法来传一个json数据,所以要把前后台的模式都配置为json

body-parser除了urlencoded方法外,还有一个json方法
这里写图片描述

这个配置就用来处理json格式的数据,body-parser可以配置多个选项,也就是说,我们为了让body-parser既能处理正常的form表单,又能处理ajax的json数据,则需要把两个都配置上
node如何接收ajax post方式传来的json类型数据_第3张图片

顺序没有关系,body-parser会只会返回一个req.body,且会将传过来的数据和设置进行匹配,选择最适合的一个处理方式进行处理

用法还是一样的,数据会存储在req.body中
node如何接收ajax post方式传来的json类型数据_第4张图片

所以为了让body-parser能够对我们传过来的json数据首选bodyParser.json这种方法,我们在前台传数据的时候也要进行配置,将头信息设为application/json,如果你是用jquery的,只要设置头信息就可以,如果你自己写的方法,记得传数据时将json数据转化为字符串
这里写图片描述

3.测试

我们已经配置好了后端的server,和前端的ajax方法,现在来测试一下

现在我想传的数据像这样,其中一个属性值又是一个数组
node如何接收ajax post方式传来的json类型数据_第5张图片

在ajax方法中写入这个data(ajax调用方法视个人情况)
node如何接收ajax post方式传来的json类型数据_第6张图片

然后观察后台打印出来的req.body,成功了!
这里写图片描述

你可能感兴趣的:(开发踩坑与技巧)