首页 > 解决方案 > 节点更新不起作用,发送到 api 时格式错误

问题描述

我尝试将我的数据从 Angular 更新到 Node.js

组件.ts

updatefunction(id,data){
    console.log("component",data);
    //component {role: "User", _id: "5c2dc052d6bfba36b41b34dd", name: "Test", email: "test123@gmail.com", //username: "Test"}
    this.uAdminService
      .updateUser(id,data).subscribe(
        result => {
          //console.log(result.json());
        },
        error => {
          console.log(error.json());
        }
      );

  }

在 myservice.ts

updatefunction(id, data){
      console.log("service", data);
       //service {role: "User", _id: "5c2dc052d6bfba36b41b34dd", name: "Test", email: "test123@gmail.com", //username: "Test"}
       let headers = new Headers({ 'x-access-token': this.token, 'Content-Type': 'application/x-www-form-urlencoded' });
        let options = new RequestOptions({ headers: headers });
        return this.http.put(this.url+id, data, options);
}

我的nodejs控制器

router.put('/:id', VerifyToken, function (req, res) {
    console.log(req.body);
    //{'{\n "role": "User", \n "_id": "5c2dc052d6bfba36b41b34dd" \n}'}
        User.findByIdAndUpdate({_id:req.params.id}, req.body, {new: true}).select("-password")
        .then(users => {
            res.send(users);
        }).catch(err => {
            res.status(500).send({
                message: err.message || "Some error occurred while retrieving Report."
            });
        });


});

我的 req.body 控制台像这样{'{\n "role": "User", \n "_id": "5c2dc052d6bfba36b41b34dd" \n}'} 但我以这种格式从 angularjs 传递 {role: "User", _id :“5c2dc052d6bfba36b41b34dd”,名称:“Test”,电子邮件:“test123@gmail.com”,//用户名:“Test”}

我不知道为什么它会转换,所以它不会更新到 db

如果我从 api 控制台它会喜欢这个 {名称:“测试”,电子邮件:“test123@gmail.com”}

标签: node.jsangularapi

解决方案


更新myservice.ts如下:

updatefunction(id, data){
      console.log("service", data);
       //service {role: "User", _id: "5c2dc052d6bfba36b41b34dd", name: "Test", email: "test123@gmail.com", //username: "Test"}
       let headers = new Headers({ 'x-access-token': this.token, 'Content-Type': 'application/json' });
       let options = new RequestOptions({ headers: headers });
       return this.http.put(this.url+id, data, options);
}

在您发送格式化数据而不是数据时将其更改Content-Type为。application/jsonjsonform


推荐阅读