猫鼬 - 找不到匹配的文件(ForEach)

时间:2017-11-29 02:26:48

标签: javascript html node.js mongodb mongoose

我是NodeJS和Mongoose的新手,这可能是一个重复的问题,所以请不要回复。我尝试找到解决方案但未能解决此错误。

基本上,当我尝试更新数据库值时出现此错误。我执行的第一个更新工作完美,但从第二个更新,我得到此错误。这些值会更新,但会立即更新多个字段,从而产生此错误。

这是我的代码:(我已将github链接添加到项目中):

User.js(型号)

local: {
    ...,
    education: [{
        id: String,
        degree: String,
        institute: String,
        dates: String,
        description: String
    }],
    ...
}

router.js

app.put('/put_education/:id', function(req, res) {
    var row_id = req.params.id; //get education id from table row

    //get the current logged in user
    User.findById(req.user._id, function (err, doc) {
        if (err) {
            console.log('no entry found');
        }

        //match the table row id with the id in users education model
        doc.local.education.forEach(function (education, index) {
            console.log(education.id + "   " + row_id);

            //if rows match, replace the database document with values from client
            if(education.id === row_id){
                doc.local.education[index] = req.body;
                doc.save(function (err) {
                    if (err) {
                        console.log(err);
                    } else {
                        res.send("Success");
                    }
                });
            }
        });
    });
});

我添加了一个console.log来查看循环操作,下面的图像显示了第一次迭代的罚款,但对于下一次迭代却很奇怪: enter image description here

我想在id匹配后打破循环,但是foreach循环没有break函数,我把它改为正常for循环但是它仍然给我同样的错误。所以我不认为打破循环是一个答案..

编辑:添加了我的网站图片,以显示更新后发生的事情(重复行) enter image description here

Github:https://github.coventry.ac.uk/salmanfazal01/304CEM-Back-End

2 个答案:

答案 0 :(得分:0)

如果你的问题突然出现,那么为什么不使用带有break语句的简单for循环。

let eduArray = doc.local.education;
for(i=0;i<eduArray.length;i++) {
   if(eduArray[i]["id"] == row_id) {
      // do your logic
      break;
   }
}

答案 1 :(得分:0)

因为你是第一次更新教育没有问题,然后出现问题,我怀疑你错误地更新了教育,看看你写的这行代码:

doc.local.education [index] = req.body;

在这里,我看到你正在将请求体内的任何内容分配给教育,但是你检查了req.body中实际存在的数据吗?

尝试记录req.body以查看您实际分配给教育的内容。