MongoDB中保存了两次数据

时间:2017-02-25 23:45:54

标签: ajax node.js mongodb express mongoose

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

这是后期路线: POST route in the back-end

以下是公司型号: enter image description here

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

我不知道,我会失去理智! 求救!

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

这是因为您将回复重定向到公司/创建

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');
    });
});

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

答案 2 :(得分:0)

我遇到了和你一样的问题,我在Udemy.com Q& A董事会发表了关于我们所关注的课程的第37讲的链接后发现了这篇文章。

此问题的解决方案处理'提交'事件NOT按钮的单击事件,看起来代码执行以响应我们希望处理click事件,然后它执行自然行为(并再次执行路由处理程序)

这是完整的validate.js文件,只需替换'点击'提交'提交'这应该可以解决问题:

$(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('');
               }
           });

       }

   }) 
});