节点PUT请求循环错误

时间:2017-11-29 20:26:49

标签: javascript node.js mongodb for-loop foreach

我昨晚问了一个类似的问题,几乎没有得到任何意见和回复。所以我再次尝试运气,因为我不能解决这个问题并继续我的项目过去两天!

昨天提到了问题的链接:Mongoose - No matching document found (ForEach)

基本上,我的客户端上有一个表,它有一个行id和按钮来更新和删除该行。单击更新按钮后,它会将行ID发送到服务器并执行PUT请求,该请求完美无缺。该问题来自我点击的另一行,它会同时更新前一行和新单击的行,并使用相同的新数据。

我已经上传了一个YouTube视频来解释这个问题,以防万一我在这里没有解释清楚:https://www.youtube.com/watch?v=G8sAP3AONYI

这是我的代码:(我已将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");
                    }
                });
            }
        });
    });
});

客户端javascript

//when edit button on row clicked, change 'save' button to 'update' inside the model
$('#education_body').on('click', '.edit_education', function() {
    var row_id = get_row_id(this);

    $("#education_save_button").hide();
    $("#education_update_button").show();

    //when update button clicked inside the model, call PUT in server
    $('#education_form').on('click', '#education_update_button', function (event) {
        event.preventDefault();
        $.ajax({
            url: '/put_education/' + row_id,
            method: 'PUT',
            contentType: 'application/json',
            data: JSON.stringify({
                id: $('input[name="education_id"]').val(),
                degree: $('input[name="education_degree"]').val(),
                institute: $('input[name="education_institute"]').val(),
                dates: $('input[name="education_dates"]').val(),
                description: $('textarea[name="education_description"]').val()
            }),
            success: function (response) {
                initialize(); //function to fill in all textfields values from db
                $("#education_saved").show().delay(3000).fadeOut();
            }
        });

        //change 'update' button back to 'save'
        $("#education_save_button").show();
        $("#education_update_button").hide();
    });
});

请参阅我之前的问题,看看错误的图像以及究竟发生了什么......

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

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

提前致谢:)

1 个答案:

答案 0 :(得分:0)

我通过将内部click()函数与外部函数分开来解决它。不确定为什么我的初始代码不起作用,但这解决了它。