У меня очень простое приложение стека 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
Я не могу воспроизвести ошибку, которую вы получаете в своем приложении (возможно, потому, что так много людей теперь удаляют вещи с вашего сайта!), Но ваш сервер не отвечает на ваш запрос на удаление, что вызывает ошибки в консоли, а также означает, что ваш угловой интерфейс может выйти из синхронизации.
Во-первых, ответьте на запрос в своем экспресс-приложении следующим образом:
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;
};
Вышеприведенное гарантирует, что ваш взгляд будет точным и согласованным с тем, что происходит на сервере.