Express JS PUT没有保存,但它正在更新

时间:2016-10-11 01:29:50

标签: javascript mongodb rest express

我有一个快速的JS应用程序,我正在尝试PUT(更新现有用户的名字)。我的架构是嵌套数组,如下所示:

enter image description here

使用PUT更新此用户的代码如下所示:

router.route('/sensors_update/:_id/')
    .put(function (req, res) {
        console.log("inside update put")
        User.findById(req.params._id, function(err, user) {
            if (err)
                res.send(err);
            console.log(user);
            user.name = req.body.name;
            console.log("User val is" + user);
            user.save();
        });
    });

我能够清楚地看到用户名正在使用JS控制台进行更新。但是在保存这个用户对象方面我遇到了问题。我想这应该是因为我有一个嵌套的架构。我的假设是对的吗?有关如何使用嵌套数组保存用户对象的任何建议。

以下是控制台消息:

inside update put
{ _id: 'Manasa',
  name: 'Manasa Sub',
  __v: 0,
  sensors: 
   [ { sensor_name: 'ras',
       _id: 57da0a4bf3884d1fb2234c74,
       measurements: [Object] } ] }
User val is{ _id: 'Manasa',
  name: 'Manas Sub',
  __v: 0,
  sensors: 
   [ { sensor_name: 'ras',
       _id: 57da0a4bf3884d1fb2234c74,
       measurements: [Object] } ] }

我想知道为什么在我尝试更新和保存用户名时访问嵌套数组。

由于

更新

_http_outgoing.js:335     抛出新的错误('不能在发送后设置标题。');           ^ 错误:发送后无法设置标头。

我该如何解决这个问题?

回应:

    {
     "message": "Cast to date failed for value \"7:00\" at path \"time\"",
     "name": "CastError",
      "type": "date",
       "value": "7:00",
      "path": "time"
      }

2 个答案:

答案 0 :(得分:0)

嵌套架构不是问题。错误清楚地记录在控制台中。您正在为日期类型模式传递字符串类型值。将时间值从字符串类型更改为日期。

或者,如果要存储字符串,请将时间shcmea类型从date更改为string。时间:{type:String}

答案 1 :(得分:0)

解决方案:当您使用嵌套数组时,推送和设置mongodb可以解决这个问题。 这是更新单个字段的方法。