使用复选框从“mongoose”中删除数据(Node JS w / AJAX)

时间:2017-01-19 08:15:22

标签: jquery ajax node.js mongodb mongoose

我正在尝试使用Node JS(带有Express)和JQuery AJAX从Mongo DB(在本例中为mongoose)中删除数据。

因此,附近有一个数据复选框(接口)。当我检查这些复选框中的一个或多个,然后按下SUBMIT时,我希望它们从数据库(Mongo DB)中删除。

因此,我尝试使用DELETE请求,从AJAX获取数据,然后从DB中删除它(使用Model.remove()),但是只要我想获取req.params(为了从db中删除项目) ),我只得到'未定义'。我认为我的Ajax有问题,但不确定究竟是什么。

快速

    app.delete('/index', function(req,res){

    console.log("req body: " + req.body); // Undefined?
    console.log(req.params.del); // Undefined as well
    console.log(req.params.data); // Undefined as well

    Blog.remove({item: req.params.del}, function(err, data){
        if (err) throw err;
        res.json(data);
    });
});

AJAX

    $('#deleteAcc').on('click', function(){
      //var item = $(this).text().replace(/ /g, "-");
      var item = $(".checkbox input:checked").parent();
      item.remove();
      $.ajax({
        type: 'DELETE',
        url: '/index',
        del: item,
        success: function(data){
          //do something with the data via front-end framework
          location.reload();
        }
      });
  });

HTML

<!DOCTYPE html>
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Simple blogging website</title>
    <script
      src="https://code.jquery.com/jquery-1.12.4.min.js"
      integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ="
      crossorigin="anonymous"></script>
    <link href="/assets/styles.css" rel="stylesheet" type="text/css" />
    <script src="/assets/appAJAX.js"></script>
  </head>
  <body>
    <h1 align="center" size="40px">Welcome to blog!</h1>
    <h2 align="center" size="36px">Best UX/UI Website ever!</h2>
    <form style="text-align: center;">
        <input style="width: 400px; height: 125px;" type="text" name="inputText" placeholder="Piss someone off..." required/>
        <button type="submit">Submit post</button>
    </form>
    <br>
    <div class="control-group">
        <% for (var i = 0; i < posts.length; i++) { %>
        <label class="checkbox">
            <input type="checkbox" /><%= posts[i].item %>
        </label>
        <% } %>
    </div>
    <div class="btn">
        <button type="button" id="deleteAcc">Delete</button>
    </div>
  </body>
</html>

3 个答案:

答案 0 :(得分:0)

我已经this fiddleJS ...根据需要更改了一些内容...复选框的值将类似posts[i].item._id,假设{{1} }对象有一个ID(应该有),然后您可能能够在您的服务器中访问item

希望有所帮助

答案 1 :(得分:0)

很抱歉写下我的通知作为答案,我没有足够的积分来撰写评论。但是与@ElmerDantas相关的答案是你将一组id传递给你的后端。因此,您必须使用for循环遍历数组,并在for循环内尝试删除&#34; selected&#34;具有mongoose删除方法的对象:

尝试做这样的事情:

var ids = req.params.deletedItems;
for(var i = 0; i < ids.length; i++){
 Blog.remove({item: ids[i]}, function(err, data){ if (err) throw err; res.json(data); })}

答案 2 :(得分:0)

维护每个复选框的ID或值

<input type="checkbox" id="<%= posts[i]._id"/><%= posts[i].item %>

ajax调用中的语法不正确

$(document).ready(function(){
  $('#deleteAcc').on('click', function(){
  var item = new Array();
    if($('input:checkbox:checked').length>0){
      $('input:checkbox:checked').each(function(){
        item.push($(this).attr('id'));
      });
      sendResponse(item);
    }
 });
  function sendResponse(item) {
    $.ajax({
      type:'post',
      url:"/index",
      data:{item:item},
      success:function(data){
        location.reload();
      }
    });
  }
});

在控制器中发布帖子请求; req.body是一个不是数组的对象,所以你只能通过键访问;
使用$ in作为比较查询运算符来删除集合中的文档

app.post('/index', function(req,res){
    var items=[];
    for(var key in req.body){
        items=req.body[key];
    }
    Blog.remove({_id:{$in:items}},function(err, data){
        if (err) throw err;
        res.json(data);
    });
});

希望这有助于!! :)