NodeJS / Angular не может удалить объект

0

Я пытаюсь удалить объект в базе данных MongoDB/NodeJS. Он работает над клиентом отдыха, но с кнопкой для удаления элемента на угловом он не работает. Каждый раз, когда я тестирую его на REST Client, он отлично работает, но с Angular он не работает.

Как я могу исправить это, чтобы он работал? Ниже мой код:

//still need to resolve the delete function
  //still need to resolve the delete function
     $scope.remove = function(item) {  
         itemid = $scope.item.id; 

         console.log(item.id);

         $http({ url: "http://localhost:3000/api/book", 
                 method: "DELETE",
                 data: "id="+item.id, 
                 headers: {"Content-Type":"application/x-www-form-urlencoded"}

               }).then(function(res) {
                 console.log(res.data);
                 console.log("good");
               }, function(error) {
                 console.log(error);
                 console.log("bad");
               });
       }   

Код моего узла/экспресс

//Delete an existing book
app.delete("/api/book", function(req, res){

 res.header("Access-Control-Allow-Origin", "*");
 res.header("Access-Control-Allow-Headers", "Cache-Control, Pragma, Origin, Authorization, Content-Type, X-Requested-With");
 res.header("Access-Control-Allow-Methods", "DELETE");

  Book.findOneAndRemove({ id: req.params.id}, function(err, result){
    res.json({
    message: "Successfully deleted the book",
    book: result
  });
  });
 });
  • 0
    Я подозреваю, что это _id а не id который вы пытаетесь удалить. Также немного избыточно для отправки в ObjectId значения isbn и ObjectId , поэтому просто сделайте его одним из них.

2 ответа

1

params объекта находится внутри body, поэтому вам нужно изменить конечную точку на:

app.delete("/api/book/:isbn", function(req, res){
 console.log('Client Reached the endpoint.');
 Book.findOneAndRemove({ id: req.body.params._id}, function(err, result){
     res.json({
       message: "Successfully deleted the book",
       book: result
     });
  });
 });

рекомендации

Поскольку вы не используете isbn, вы должны изменить свою конечную точку на:

app.delete( "/api/book/:id", function ( req, res ) {
    Book.findOneAndRemove( { id: req.params.id }, function ( err, result ) {
        res.json( {
            message: "Successfully deleted the book",
            book: result
        } );
    } );
} );

Тогда ваша угловая функция будет:

//Updated
$scope.remove = function () {

    $http( {
        method: 'DELETE',
        url: '/api/book/' + item.id //Verify if item.id has a value...
    } ).then(
        function ( response ) {
            console.log( 'Sucess', response );
        },
        function ( response ) {
            console.log( 'Fail', response )
        }
    );

};  

Помните следующее

params: "/api/route/:param"
call: req.params.param

строки запроса (например, /api/route/1?somequery=something): "/api/route/:param"
call: req.query.somequery

данные (например, {id: 1, name: 'x'}): "/api/route/:param"
call: req.body.id, req.body.name

  • 0
    Это не сработало, но я пошел дальше и изменил свой код, который показывает ошибку DELETE XHR.
  • 0
    Хммм, используйте почтальон для проверки конечной точки http://localhost:3000/api/book/ увидеть, если проблема в коде на стороне сервера, или если это на стороне клиента, вы сказали, что сторона сервера работала правильно? Откуда вы знаете?
Показать ещё 5 комментариев
0

Вы можете использовать услугу на стороне входа

angular.module('users').factory('MyService', ['$resource', function($resource) {
    return $resource(':url/:id1/:id2', {},
        {
            'delete': { method: 'DELETE' }
        });
},
]);

и использовать эту услугу в своей функции

$scope.remove = function() {  
   MyService.get({url: 'book', id1: item.id
                }).$promise.then(function(result) {
                   console.log(""Success);
                }).catch(function(error){
                   console.log("error");
                });
} 

Создайте базовый url как localhost: 3000/api в сервисе и отмените эту службу в контроллере.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню