前几天在做用户登录功能的时候发现一个问题

我的登录是使用ajax方式,post方法传值到后台(nodejs),后台获取值到数据库比对然后返回登录结果。

设计非常完美,不过。。。

 

实践过程中发现,后台无论如何都获取不到angular发送的数据,即使network控制台能查看得到,但后台没戏。

查!

找了很多博客、资料发现问题所在:

前端使用GET、POST方式提交信息时, 服务端根据request header Content-Type的值来判断接下来的操作:

1.如果前端请求的headers头设置为application/x-www-form-urlencoded,那么后端无论是requestParams(针对get)还是requestBody(针对post)都能获取到数据

2.如果前端headers设置为multipart/form-data,那么后端requestBody无法获取数据

3.如果前端请求的headers头设置为其他格式(即:包括application/json, application/xml等),那么后端requestBody能够获取数据,并且后台只能通过requestBody获取

 

根据这个原理,修改前端请求代码如下:

$http({
    method:"post",
    url:"http://192.168.50.68:8080/login",
    data:$scope.login,
    headers:{'Content-Type':'application/json'}     //需要手动修改    headers,否则后台无法获取数据
}).then(function(res){

})

修改请求的header,让后台requestBody可以获取数据

 

顺便,$http发送请求的时候,参数属性名为data,get请求的时候为params,提醒一下自己

 posted on 2017-11-16 20:57  谢某某  阅读(572)  评论(0编辑  收藏  举报