【问题标题】:Data Saved Twice in MongoDB数据在 MongoDB 中保存了两次
【发布时间】:2017-07-16 17:22:59
【问题描述】:

我有一个添加 newCompany 的表单,我使用 AJAX 发送数据,如下所示:

这里是发布路线:

这是公司模型:

问题是,当我添加新公司时,插入了两次数据,第一个是没有图像名称的12个字段!第二个是空对象!像这样:

我不知道,我会失去理智! 请帮忙!

【问题讨论】:

  • 请复制并粘贴您的代码,然后使用 cmd/ctrl + k。谢谢!
  • 你解决过这个问题吗?在将表单数据保存到涉及图像的猫鼬中时,我遇到了同样的困境......

标签: ajax node.js mongodb express mongoose


【解决方案1】:

您在保存时调用res.redirect('/company/create'),它将HTTP302 发送到客户端。然后客户端再次触发相同的路由。在您的 $.ajax() 请求完成后,尝试在客户端执行重定向。

【讨论】:

  • 您的评论很有道理。我编辑了对success: function (data, response) { window.location.href = response.redirect; 的Ajax 调用,并从路由中删除了res.redirect('/company/create')!但它也不起作用! !
  • 即使我将重定向更改为主页以避免像 res.redirect('/home'); 那样两次调用相同的路线,数据也会插入两次完整对象和空对象!
【解决方案2】:

看,这是因为您将响应重定向到 company/create

router.post('/company/create', function(req, res, next){

  var newCompany = new Company({
    name: req.body.name,
    address: req.body.address,
    city: req.body.city,
    country: req.body.country,
    .
    .
    .
    .
  });

    Company.save(newCompany, function(err, response){
      if(err){
        console.log(err);
      }

      res.location('/home');
      res.redirect('/home');
    });
});

如果它不起作用,让我们看看你的模型。问题可能就在那里

【讨论】:

  • 也不行,我认为是ajax方法的错误,因为当我注释掉它时,只有一个空对象发送到后端!
  • 你会在上面的问题中找到模型的截图。
  • 在app.post中添加console.log(req.body),再次发送ajax。这样你就可以确保 ajax 不会发送两次数据。
  • sebastian salamanca 重定向是一个获取请求,并且该特定 url 也有一个获取处理程序
【解决方案3】:

我遇到了和你一样的问题,我在 Udemy.com 问答板上发布了我们正在学习的课程的第 37 课上的链接后到达了这篇文章。

这个问题的解决方案处理按钮的“提交”事件而不是点击事件,看起来代码被执行以响应我们希望处理点击事件,然后它确实执行自然行为(并执行再次路由处理程序)

这是完整的 validate.js 文件,只需将 'click' 替换为 'submit' 即可解决问题:

$(document).ready(function(){

   $('#register').on('submit',function(e){

       var name     = $.trim($('#name').val());
       var address  = $.trim($('#address').val());
       var city     = $.trim($('#city').val());
       var country  = $.trim($('#country').val());
       var sector   = $.trim($('#sector').val());
       var website  = $.trim($('#website').val());
       var img      = $.trim($('#upload-input').val());

       var isValid = true;

       if(name == ''){

           isValid = false;
           $('#errorMsg1').html('<div class="alert alert-danger">Company name can\'t be empty</div>');
       }

       if(address == ''){

           isValid = false;
           $('#errorMsg2').html('<div class="alert alert-danger">address can\'t be empty</div>');
       }

       if(city == ''){

           isValid = false;
           $('#errorMsg3').html('<div class="alert alert-danger">City can\t be empty</div>');
       }

       if(country == ''){

           isValid = false;
           $('#errorMsg4').html('<div class="alert alert-danger">Country can\'t be empty</div>');
       }

       if(sector == ''){

           isValid = false;
           $('#errorMsg5').html('<div class="alert alert-danger">Sector can\'t be empty</div>');
       }

       if(country == ''){

           isValid = false;
           $('#errorMsg6').html('<div class="alert alert-danger">Website can\'t be empty</div>');
       }

       if(isValid == false){

           return false;

       }else{

           var newCompany = {
               name:        name,
               address:     address,
               city:        city,
               country:     country,
               sector:      sector,
               website:     website,
               img:         img
           };

           $.ajax({
               url:         '/company/create',
               type:        'POST',
               data:        newCompany,
               success:     function(){

                   $('#name').val('');
                   $('#address').val('');
                   $('#city').val('');
                   $('#country').val('');
                   $('#sector').val('');
                   $('#website').val('');
                   $('#upload-input').val('');
               }
           });

       }

   }) 
}); 

【讨论】:

  • 但是当我检查网络标签时,帖子只发生一次
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-20
  • 2015-08-27
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多