这段时间在捡起来前端,想自己写几个小应用。结果一开始就遇到非常匪夷所思的问题。Axios发的POST请求无法被Express直接解析。
首先,来说一下这个问题出现的原因,归根结底,不管php、java亦或是node。想要在后台接收到POST的数据,都需要POST在发送时使用application/x-www-form-urlencoded,具体操作就是
1 | xhr.setRequestHeader("content-type":"application/x-www-form-urlencoded;charset=utf-8") |
这应该是最常见的 POST 提交数据的方式了。浏览器的原生
POST Example Domain HTTP/1.1
Content-Type: application/x-www-form-urlencoded;charset=utf-8
通过上面这种方式传值,默认是以表单形式的,所以express设置中是这样的
1 | app.use(bodyParser.urlencoded({ extended: true |
可惜,axios默认的Content-type设置的为application/json,通过这种方式发送的数据后台无法通过正常方式获取(原理就不解释了,反正我也不懂)
java和php可以获取到对应的request原始流数据获取到对应的值并将其序列化
但是node怎么办?
express中使用的是body-parser去格式化前台传来的数据,归根结底直接在相关服务中设置
app.use(bodyParser.json())即可,具体实现代码
1 | //server.js |