Estoy implementando el tutorial en la pila media https://www.youtube.com/watch?v=AEE7DY2AYvI
Estoy agregando una función de eliminación para eliminar elementos de la base de datos con un clic de botón
Mi controlador del lado del cliente tiene las siguientes 2 funciones para agregar a db y eliminar
$scope.createMeetup = function() {
var meetup = new Meetup();
meetup.name = $scope.meetupName;
meetup.$save(function (result) {
$scope.meetups.push(result);
$scope.meetupName = "";
});
}
$scope.deleteMeetup = function() {
item = $scope.meetups[0];
console.log("deleting meetup: " + item["name"]);
Meetup.delete(item);
scope.meetups.shift();
}
Mi servidor tiene el siguiente código
module.exports.create = function (req, res) {
var meetup = new Meetup(req.body);
meetup.save(function (err, result) {
res.json(result);
});
}
module.exports.remove = function(req, res) {
console.log("GOING TO REMOVE!!!");
console.log(req.query);
item = req.query;
Meetup.remove(item, function (err, results) {
console.log("done");
console.log(err);
console.log(results);
});
}
Cuando ejecuto mi código y si elimino un elemento ya cargado en la lista, se elimina de Mongodb perfectamente. Pero si agrego un elemento a la lista y yo no actualizar la página, produce un error en mi servidor que aparece como
GOING TO REMOVE!!!
{ "$resolved": "true",
__v: "0",
_id: "54ec04e70398fab504085178",
name: "j" }
done
{ [MongoError: unknown top level operator: $resolved]
name: "MongoError",
code: 2,
err: "unknown top level operator: $resolved" }
null
Si actualizo la página, se borra bien. Pero si agregué la entrada, angular parece estar agregando una nueva variable $ resuelta. ¿Por qué está pasando eso?
También otra pregunta, ¿Cuál es la forma correcta dellamada eliminar? Lo llamo ahora pero no puedo devolver la llamada. Quiero una devolución de llamada que regrese y luego cambio la lista de elementos. Intenté agregar una devolución de llamada pero el código nunca llega. es decir, probé lo siguiente
/*
Meetup.delete(item, function () {
console.log("In callback!!");
console.log(returnValue);
console.log(responseHeaders);
$scope.meetups.splice(item);
});
*/
/*Meetup.delete(item,
function (returnValue, responseHeaders) {
console.log("In callback!!");
console.log(returnValue);
console.log(responseHeaders);
$scope.meetups.splice(item);
},
function (httpResponse){
// error handling here
console.log("Need to handle errors");
});
*/
Soy muy nuevo en el nodo y estoy confundido. Cualquier ayuda es muy, muy apreciada
Respuestas
0 para la respuesta № 1Parece que es posible llamar item.delete
en lugar de Meetup.delete(item)
. Puede llamar a los mismos métodos en la instancia del modelo. Impide el envío de propiedades angulares al servidor.
Pero es mejor hacer una API de descanso con el método de eliminación
DELETE / meetups /: id
y enviar solo un _id
Meetup.remove({id: item._id});