express如何接收前端post请求发来的json数据

今天玩node+express+mongoose的时候,写了个简单的测试页面来测试数据,就是页面输入用户名,提交查询后,后台返回用户名相关的所有数据。然而我在测试后台接收数据的时候发现了好多问题,好在一个个的都在网上找到解决办法了,相信我绝对不是最后一个踩坑的23333,所以就有了这篇文章

第一个问题:为什么我用request.params/path/query/originalUrl获取不到想要的数据?

首先,上述四种方法都是用来获取get方法的url相关部分的数据的,一句话,post请求的数据不是用这四种方法来获取的。本文主要讲述获取post请求的数据,所以想了解get请求的数据如何获取,或者上述4种方法如何使用的可以去看看官方文档

第二个问题:为什么我用request.body得到一个undefined?

request.body方法是用来获取post请求的数据的,这点毋庸置疑,但是这里需要另一个中间件才能让这个方法取得数据,这个中间件是body-parser,用npm安装一下然后在文件里引用一下


引用完后,让express的实例对象用use方法来调用一下


ok,添加完这些代码,request.body终于能取到数据了。

但是你知道添加的那两句代码分别适用于什么情况吗?如果知道的话应该也不会看到这篇文章了吧...

坑点所在

重点在这里,我在测试的时候发现用form表单的action和method来发送post请求的时候,发送的数据是Form Data下的,而我用XMLHTTPRequest方法发送的post请求,数据是在Request Playload下的。后来发现区别还是很大的,具体如下:

request的响应头header里如果是这样设置的

那么数据就是在Request Playload下,这个时候后台代码必须要有


这段代码才能用request.body获取到数据

而如果header设置是这样的

那么数据就是在Form Data下,则必须要这段代码

才能获取到数据

结束。

-----------------------------------------------------------------------------------------------------------------------------------------------------

后面又去看了看express的文档,发现4.x版本已经不需要body-parser了...晕,感觉写了些没有卵用的东西,毕竟是我自己踩过的坑,文章还是保留吧

4.x版本官方文档已经有说明


express如何接收前端post请求发来的json数据_第1张图片

不需要body-parser中间件引入,把之前body-parser改成express就行了,效果是一样的,省去了中间件的下载和引入,我估计是合并在一起了吧

你可能感兴趣的:(express如何接收前端post请求发来的json数据)