前几天在做用户登录功能的时候发现一个问题
我的登录是使用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,提醒一下自己