angularjs发送请求到nodejs api

我已经angularjs后调用(提交login表单数据)到一个/ login nodejs API端点。 在Nodejs端点(在request.body中)接收到的数据不是json格式,但是它具有额外的填充,如下所示:{'{“email”:“a@b.com”,“password”:“aaa”}' :''}这是什么格式? 如何从此对象访问“电子邮件”和/或密码?

客户端代码,

login: function(loginData, callback) { $http({ method: 'POST', url: '/api/login', data: loginData, headers: {'Content-Type': 'application/x-www.form-urlencoded'} }).then(function successCallback(response) { }, function errorCallback(response) { }); } 

服务器代码:

 app.post('/login', function(req, res) { console.log('Email:' + req.body.email); //this gives undefined error console.log(req.body); // shows { '{"email": "a@b.com", "password": "aaa"}': ''} } 

我错过了什么? 任何帮助表示赞赏。

–Atarangp

默认情况下,angularjs使用JSON.stringify。 如果你想使用x-www-form-urlencoded,你必须指定你的转换函数。

 // transforme obj = {attr1: val1} to "attr1=" + encodeURIComponent(val1) + "&attr2=" ... function transformRequestToUrlEncoded(obj) { var str = []; for(var p in obj) str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); return str.join("&"); } $http({ method: 'POST', url: your_url, headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}, transformRequest: transformRequestToUrlEncoded, // specify the transforme function data: datas });