mongoose / mongodb不会用PUT更新

时间:2015-11-22 19:14:52

标签: angularjs mongodb express mongoose

我目前是Express和失败方式的学生。

我目前的头痛是PUT不是PUT-ting。我的应用程序有一个我需要在用户第一次登录时上传的数据。我想在之后它会更快,因为我只能上传已经更改的内容。这个理论并没有那么顺利。

步骤如下:

  1. 用户首次登录,已通过身份验证
  2. App在Values架构中创建一个新条目,只包含必填字段
  3. App翻转用户架构中的开关以显示已创建的值
  4. App然后将其余值放入现有架构中。
  5. 我打破了2& 4分为两件,因为当我把它做成一件时,由于某种原因,猫鼬开始甩掉他的衣服。除了现在,它实际上并没有在步骤4,甚至更晚的时候用户编辑任何内容(通过应用程序中的表单)。这就像它停止听,或者其他什么。

    这是值模式的样子(截断,因为它是巨大的):

        var ValueSchema = new Schema({
            user_id: {
                type: String,
                required: true,
                unique: true
            },
            base: [{
                type: String,
                required: true
            }],
            value1: [ String ],
            value2: [ String ],
            value3: [ String ],
            value4: [ String ]
        });
    

    这是GETting和PUTting的部分:

        // ------------------ FORM VALUES
        router.route('/values/:user_id')
            // create
            .post(function(req, res) {
                var task = req.body;
                var value = new Value(task);
                value.save(function(err) {
                    if (err) {
                        res.json(err);
                    } else {
                        res.write("success");
                    }
                });
            })
            // update
            .put(function(req, res) {
                var values = req.body;
                var user_id = req.params.user_id;
                Value.update({user_id: user_id}, function(err, values) {
                    if (!err) {
                        res.json("okay");
                    } else {
                        res.write("fail");
                    }
                });
            })
            // view
            .get(function(req, res) {
                var id = req.params.user_id;
                Value.find({'user_id':id}, function(err, value) {
                    if (!err) {
                        res.send(value);
                    } else {
                        res.write("fail");
                    }
                });
            })
        });
    

    由于我仍然无法弄清楚的原因,第2步需要永远。最重要的是,Firefox会发送没有令牌的消息,但http调用在“网络”选项卡和服务器本身的输出中都显示为成功。这是其中一个http调用:

            return $http({
                method: 'PUT',
                url: '/api/values/' + userId,
                data: values,
                headers: {
                    'x-access-token':  token
                }
            })
            .then(function (response) {
                // chained to next step
                // etc
    

    向我看教科书,但是当我在任何PUT之后检查Postman时,值条目看起来像这样:

        [
            {
                "_id": "56513f140dab13e932682cf2",
                "user_id": "5651f7454cd0c2543ca5202f",
                "__v": 0,
                "value1": [],
                "value2": [],
                "value3": [],
                "value4": []
            }
        ]
    

    在第一次POST之后,它根本就没有更新。疯狂的是,我可以更新另外两个架构,一切正常,并且那些与Value架构具有相同的模式。救命!我错过了什么?

    提前感谢!

1 个答案:

答案 0 :(得分:5)

您的 https://askubuntu.com/questions/423886/efficiently-search-sorted-file/701237#701237 方法缺少更新文档:

// update
.put(function(req, res) {
    var values = req.body;
    var user_id = req.params.user_id;
    Value.update({user_id: user_id}, values, function(err, values) {
        if (!err) {
            res.json("okay");
        } else {
            res.write("fail");
        }
    });
})