Angular 2 http post作为空对象或在键侧发送

时间:2017-06-04 21:14:25

标签: javascript node.js angular http post

我尝试将数据从角度2发送到服务器端的节点js 我的角度代码是

addCrib(data:any) {
  let bodyString = data;
   let headers      = new Headers({ 'Content-Type': 'application/json' });
      return this.http.post('http://localhost:8000/addcribs',data , {headers:headers}).map(res => res.json()).subscribe(
        data => console.log(data)
      );

  }

并在服务器端

addcribs: function(req,res){
    var x = req.body;
    console.log(x); // {} with application/json and { '{data....}':''} with application/x-www-form-urlencoded
    let crib = new Cribs({id:0, type:req.body.type,price:req.body.price,address:req.body.address,description:req.body.description,bedrooms:req.body.bedrooms,bathroom:req.body.bathroom,area: req.body.area,image:req.body.image});
    crib.save(function(err,crib){
      if(!err){
        res.json({success:true});
      }
    })
  }

当我在服务器端使用console.log时我得到一个空对象{}当我使用contentType:application / json时,当我使用contentType时:application / x-www-form-urlencoded我得到的所有数据都是对象的关键方面,例如。 {' {type:house}':''}我尝试在客户端数据上使用JSON.stringify但没有帮助

N.B。我在服务器端使用cors依赖

2 个答案:

答案 0 :(得分:1)

我找到了答案,我使用了内容类型:application / x-www-form-urlencoded

并使用:

let urlSearchParams = new URLSearchParams();
urlSearchParams.append('type', data.type);
urlSearchParams.append('bathrooms', data.bathrooms);
let body = urlSearchParams.toString()

urlSearchParams可以从角度为2的http库中导入

答案 1 :(得分:0)

由于我无法对Mahmoud Youssef的最后评论发表评论,我正在写这篇评论:

由于您正在处理JSON对象,并希望将它们转换为编码的表单url,因此最好执行以下操作:

const body = new URLSearchParams();
//The code below will take any JSON object into URLSearchParams variable, this way you won't need to keep assigning each value manually
//value here refers to a typescript class or json object that you have
Object.keys(value).forEach(key => {
  body.set(key, value[key]);
});

然后在发送回服务器时将 body.toString()作为值发布,确保 json或class 对象与服务器接受的对象匹配< / p>

从angular2中的 @ angular / http 导入 URLSearchParams 非常重要,因为无法在 Microsoft Edge /中定义URLSearchParams IE ,请参阅URLSearchParams Browser's compatibility