2017-03-14 2 views
0

Ich versuche, Elemente zu löschen, nachdem sie mit Mungo aus der Datenbank abgerufen wurden. Allerdings bin ich an einem Teil fest, wo ich nicht weiß, wie man ein bestimmtes Element in der Liste "ergreift" und dann löscht.Löschen von Listenelementen mit Node.js Express Mongoose

In meiner App habe ich eine Liste der Benutzer und deren Alter. Hier ist meine userview.ejs (Edited nach der Zugabe von frontend.js)

<meta charset="UTF8"> 
 
<link href="../public/javascripts/frontend.js"> 
 
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"> 
 
<link rel="stylesheet" href="/stylesheets/userlist.css"> 
 
<link href='//fonts.googleapis.com/css?family=Amatic SC' rel='stylesheet'> 
 
<link href='//fonts.googleapis.com/css?family=NTR' rel='stylesheet'> 
 
<html> 
 
    
 
    <head> 
 
     <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> 
 
     <title>Userlist</title> 
 
     <script src="javascripts/frontend.js"></script> 
 
    <script> 
 
      
 
     </script> 
 
     
 
    </head> 
 
    
 
    <div class="container-fluid"> 
 
      <div class="row"> 
 
        <h1><strong>FORM</strong></h1> 
 
        <hr id="hr2" style="border: 6px solid palevioletred" > 
 
       <div id="black"> 
 
        <form class="form-horizontal" method="post" action="/users"> 
 
         <fieldset> 
 

 

 
         <!-- Text input--> 
 
         <div class="form-group"> 
 
          <label class="col-md-4 control-label" for="textinput">Name : </label> 
 
          <div class="col-md-4"> 
 
          <input id="textinput" name="name" placeholder="Enter Username" class="form-control input-md" type="text" value="Name" onfocus="if (this.value=='Name') this.value='';"> 
 

 
          </div> 
 
         </div> 
 

 
         <!-- Text input--> 
 
         <div class="form-group"> 
 
          <label class="col-md-4 control-label" for="textinput">Age : </label> 
 
          <div class="col-md-4"> 
 
          <input id="textinput" name="age" placeholder="Enter Age" class="form-control input-md" type="number"> 
 

 
          </div> 
 
         </div> 
 

 
         <!-- Button --> 
 
         <!-- Button (Double) --> 
 
         <div class="form-group"> 
 

 
          <div class="col-md-8"> 
 
          <button id="singlebutton" name="button1id" class="btn btn-success">Add User</button> 
 
          </div> 
 
         </div> 
 

 
      <body> 
 

 
       <h1><strong>USERS</strong></h1> 
 
       <hr id="hr1" style="border: 6px solid #7ec4ec;" > 
 
       <ul id="list" class="triangle"> 
 
        <% for(var i=0; i<userlist.length; i++) {%> 
 
         <li><%= userlist[i].name %> : <%= userlist[i].age %> <a href="#" onclick="delete_element('<%= userlist[i]._id %>')" id="delete">Delete</a> || <a href="#" onclick="update_element()">Update</a></li> 
 
        <% } %> 
 
       </ul> 
 
      </body> 
 

 

 
         </fieldset> 
 
        </form> 
 
       </div> 
 
       </div> 
 
    </div> 
 
</html>

EDIT:

Das ist mein frontend.js

var $ = require('jquery'); 
 
function delete_element (userId) { 
 
    $.post('delete/user/',userId,function(){ 
 
      
 
     alert('Deleting....'); //For now i have just added an alert. 
 
    }); 
 
}

Das ist mein neues users.js

'use strict' 
 

 
var express = require('express'); 
 
var router = express.Router(); 
 
var User=require('../models/usermodel.js'); 
 
var $= require('jquery'); 
 
    
 
/* GET users listing. */ 
 

 

 
router.get('/', function(req, res, next) { 
 
    User.find({},function(err,userModel){ 
 
     res.render('userview',{userlist:userModel}); 
 
    }); 
 
}); 
 

 

 
router.post('/', function(req, res, next) { 
 
    
 
    var newUser = new User({ 
 
      name:req.body.name, 
 
      age: req.body.age   
 
    }); 
 
    
 
    console.log(newUser); 
 
    // save the user 
 
    newUser.save(function(err) { 
 
     if (err) throw err; 
 

 
     console.log('User created!'); 
 
    }); 
 

 
}); 
 

 

 
router.post("delete/user/:id", deleteUser); 
 

 
function deleteUser(req,res){ 
 
    
 
    User.findById(req.params.id).remove().exec(function(err){ 
 
     if (!err) { 
 
       console.log('Removed Successfully'); 
 
     } 
 
     else { 
 
       console.log('Error in removing the entry'); 
 
     } 
 
    }); 
 
} 
 

 

 
    /* 
 
function delete_element(id){ 
 
    
 
     $('#delete').on("click",function(){ 
 
      $(this).parent().remove(); 
 
     }); 
 
     User.remove({_id: req.body.id }, function(err) { 
 
     if (!err) { 
 
       console.log('Removed Successfully'); 
 
     } 
 
     else { 
 
       console.log('Error in removing the entry'); 
 
     } 
 
     
 
      }); 
 
} 
 
    */    
 

 

 

 
/*router.post('/', function(req, res, next) { 
 
    userModel.update({name: req.params.name}, { $pullAll: {uid: [req.params.deleteUid] } }) 
 
    
 
});*/ 
 

 

 

 

 

 

 

 
module.exports = router;

Antwort

0

einbetten _id in Ihrem Link Löschen des Benutzers:

onclick="delete_element('<%= userlist[i]._id %>')" 

Dies erzeugt:

onclick="delete_element('55510c6cf0e19f6414b30f97')" 

und leiten Sie _id des Benutzers an Ihre Löschfunktion weiter.

bearbeiten

Okay, so, es scheint, Sie versuchen, eine Funktion auf dem Server (Knoten), direkt aus Ihrer Sicht (HTML) definiert zu nennen. Das ist absolut nicht wie es funktioniert :)

onclick="delete_element()" ruft eine Funktion lokal in Ihrem Browser auf. Die Konsole (F12) muss error : delete_element is undefined rufen.

So ist der Weg zu gehen, ist der folgende:

1) Erstellen Sie eine JavaScript-Funktion (nicht in Knoten, in der Front-End-Anwendung), die den Server aufruft.

function delete_element (userId) { // This will be called on click and passed the user's _id 
    $.post('delete/user/'+userId) // This calls the server. Todo : add a callback, etc. 
} 

2) Ihr Node-Server muss eine entsprechende Route, die den Anruf erhalten:

router.post("delete/user/:id", deleteUser); // This is reached when the client calls post('delete/user/1a2b3c4d'). The id is read with req.params.id 

deleteUser = (req,res) => { 
    User.findById(req.params.id) 
     .remove() 
     .exec(error => { // Reply to the client, otherwise the request will hang and timeout. 
      if(error) return res.status(500).send(error); 
      res.status(200).end() 
     }) 
} 

, die für die erste Frage ist, erstellen Sie bitte eine neue Frage für die zweite.

+0

funktioniert immer noch nicht. Ist die Funktion delete_element() korrekt? –

+0

Yean, der Mungo-Ruf scheint richtig zu sein. Wie sieht Ihre 'delete_element'-Funktion aus (die Vorderseite, nicht die in Node)? –

+0

So etwas gibt es nicht. –

Verwandte Themen