mongoose/mongodb不会用PUT更新

kl0*_*l02 2 mongoose mongodb express angularjs

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

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

步骤是:

  1. 用户首次登录,经过身份验证
  2. 应用程序在"值"架构中创建一个新条目,仅包含必填字段
  3. 应用程序翻转用户架构中的开关以显示已创建的值
  4. 然后,应用程序将其余值PUT放入现有架构中.

我把2和4分成两块,因为当我把它分成两块时,由于某种原因,Mongoose开始扔掉他的装.除了现在,它实际上并没有在步骤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 ]
    });
Run Code Online (Sandbox Code Playgroud)

这是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");
                }
            });
        })
    });
Run Code Online (Sandbox Code Playgroud)

由于我仍然无法弄清楚的原因,第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
Run Code Online (Sandbox Code Playgroud)

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

    [
        {
            "_id": "56513f140dab13e932682cf2",
            "user_id": "5651f7454cd0c2543ca5202f",
            "__v": 0,
            "value1": [],
            "value2": [],
            "value3": [],
            "value4": []
        }
    ]
Run Code Online (Sandbox Code Playgroud)

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

提前致谢!

chr*_*dam 5

您的update()方法缺少更新文档:

// 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");
        }
    });
})
Run Code Online (Sandbox Code Playgroud)