【问题标题】:Trying to save a nested object to my REST API尝试将嵌套对象保存到我的 REST API
【发布时间】:2015-12-22 20:48:05
【问题描述】:

这里是 REST/API 新手!

我想为用户保存一个列表,但我没有得到想要的响应。

我的猫鼬模式如下所示:

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
    });
}

【问题讨论】:

  • 你需要根据传递的id找到一条记录吧?

标签: node.js mongodb rest express mongoose


【解决方案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

【讨论】:

  • 嘿伙计,我尝试将您的代码应用到我的函数中,但仍然没有得到想要的结果。我已经更新了我的原始帖子以包含我的整个用户更新功能。
  • @NetOperatorWibby 你得到正确的 req.body.cookies 了吗?我的意思是,如果您的函数在更新用户之前获得所需的值
  • 在更新之前我有办法检查吗?
  • 您可以使用 node-inspector 调试您的应用程序,或者更轻松地使用 console.log 来打印对象值
  • 我不确定如何查看来自console.log 的响应以及此更新功能。我正在使用 Postman 来测试我的 API。我只知道我看到一个空域区域。
猜你喜欢
  • 1970-01-01
  • 2018-03-10
  • 1970-01-01
  • 1970-01-01
  • 2021-07-26
  • 1970-01-01
  • 2019-01-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多