尝试将嵌套对象保存到REST API

时间:2015-09-25 04:56:55

标签: node.js mongodb rest express mongoose

REST / API新手在这里!

我想向用户保存一系列内容,但我没有得到所需的响应。

我的mongoose架构如下所示:

var mongoose = require("mongoose"),
  mongooseSchema = mongoose.Schema,
  userSchema = {
    "name": String,
    "email": String,
    "cookies": {
      "cookie": [{
        "name": String,
        "brand": String
      }]
    }
  };

我的用户路线(混乱的部分)看起来像这样:

User.findById(req.params.id, function (err, user) {
    user.name = req.body.name;
    user.email = req.body.email;
    user.cookies = {
      "cookie": [{
        "name": req.body.cookies.cookie.name,
        "brand": req.body.cookies.cookie.brand
    }]
};

我的回答最终是:

{
  "_id": "56048e38701a663707b49c7a",
  "__v": 0,
  "email": "netopwibby@thenetwork.email",
  "name": "NetOperator Wibby",
  "cookies": {
    "cookie": []
  }
}

过去一周我一直试图让API运行起来,并且在进一步取得成功的同时,我还没有。如果有人能说清楚为什么我的代码不起作用,我会非常感激。

编辑:我更新了我的用户更新功能以应用@ ianaya89的代码,但仍然没有运气。完全发布了这个功能。

function updateUser(req, res) {
  var updatedUser = {};
  updatedUser.name = req.body.name;
  updatedUser.email = req.body.email;
  updatedUser.cookies = {
    "cookie": [{
      "name": req.body.cookies.cookie.name
      "brand": req.body.cookies.cookie.brand
    }]
  };

  User.findByIdAndUpdate(req.params.id, updatedUser, {new: true})
    .exec(function(err, user) {
      if (err) {
        res.json({
          "ERROR": err
        });
      } else {
        res.json({
          "UPDATED": user
        });
      }
      //... your callback
    });
}

1 个答案:

答案 0 :(得分:1)

我认为您的代码工作正常但mongoose正在返回旧用户属性而不是新用户属性。因此,您可以尝试使用findByIdAndUpdate方法和类似的方法:

var updatedUser = {};
updatedUser.name = req.body.name;
updatedUser.email = req.body.email;
updatedUser.cookies = {
  "cookie": [{
  "name": req.body.cookies.cookie.name,
  "brand": req.body.cookies.cookie.brand
}];

User.findByIdAndUpdate(req.params.id, updatedUser, {new: true})
  .exec(function(err, user){
    //... your callback  
  });

findByIdAndUpdate的第三个参数是一组可能的选项,在这种情况下,我将其设置为返回更新的用户而不是旧用户:{new: true}

查看文档here