Значит удалить. Работает только один раз

0

У меня очень простое приложение стека MEAN. Я почти закончил с этим, но у меня есть одна маленькая ошибка.

Когда я иду, чтобы удалить строку, она удалит ее в порядке. Однако, когда я пытаюсь удалить второй или третий и т.д., Он удалит его только из области действия. Я должен сначала обновить для удаления, чтобы снова работать на стороне сервера.

Угловой код ниже

  $scope.deleteNote = function(city){


     $http({
    method: 'DELETE',
    url: '/city',
    data: city.city,
    headers:{"Content-Type": "application/json;charset=utf-8"} });


    var index = $scope.cities.indexOf(city.city);
    var cityindex = city.city;



    console.log(cityindex + " at " + index);
    console.log(cityindex);
    console.log($scope);
    $scope.cities.splice(index, 1);

};

Код узла

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

CityDb.findOneAndRemove({city: req.body.city}, function(err, results){
    if (err) throw err;

});

});

Так, что происходит?

сайт на heroku https://serene-springs-2108.herokuapp.com/#/

github для полного кода

https://github.com/jminterwebs/STBExpress/tree/MEAN/Public/javascript

Теги:
mean-stack

1 ответ

2
Лучший ответ

Я не могу воспроизвести ошибку, которую вы получаете в своем приложении (возможно, потому, что так много людей теперь удаляют вещи с вашего сайта!), Но ваш сервер не отвечает на ваш запрос на удаление, что вызывает ошибки в консоли, а также означает, что ваш угловой интерфейс может выйти из синхронизации.

Во-первых, ответьте на запрос в своем экспресс-приложении следующим образом:

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

  CityDb.findOneAndRemove({city: req.body.city}, function(err, results){

    if (err){
      res.status(500).send({error: err});
      // Assume you are going to catch this somewhere...
      throw err;
    }

    else
      res.status(200).send();

  });

});

А во-вторых, только удалите элемент из своего углового поля, когда успешное удаление подтверждено:

$scope.deleteNote = function(city){

  // Make the request
  $http({
    method: 'DELETE',
    url: '/city',
    data: city.city,
    headers:{"Content-Type": "application/json;charset=utf-8"} 
  })
  // On success:
  .then(function (){
    var index = $scope.cities.indexOf(city.city);
    var cityindex = city.city;
    $scope.cities.splice(index, 1);
  })
  // On error:
  .catch(function (){
    // Do something better than this:
    alert("Something bad happened");
  })

  .finally(function (){
    // Re-enable the button.
    city.deleting = false;
  })

  // Disable the delete button and show a loading animation based on
  // this value (use 'ng-disabled').
  city.deleting = true;


};

Вышеприведенное гарантирует, что ваш взгляд будет точным и согласованным с тем, что происходит на сервере.

Ещё вопросы

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