У меня есть базовое приложение CRUD, моя основная проблема заключается в функции удаления.
Угловая контроллер вызывает $ HTTP действие
'use strict';
(function(){
var app = angular.module('JournalApp', [])
.controller('JournalController', function($scope, $http){
var loadEntries = function(){
$http.get('/api/entry')
.then(function(response){
$scope.entries = response.data;
if(response.data.noEntries){
$scope.entries.noEntries = true;
};
});
};
loadEntries();
//Create new Journal Entry
$scope.addEntry = function(entry){
var data = ({
hours: entry.hours,
notes: entry.notes
});
$http.post('/api/entry', data);
loadEntries();
};
//Delete Journal Entry
$scope.delEntry = function(item){
$http({
method: 'DELETE',
url: '/api/entry',
// data: item,
data: {date: item.date},
headers: {'Content-Type': 'application/json;charset=utf8'}
}, loadEntries());
};
});
})();
, который направляется на мой стороне сервера обработчика
//GET Request
this.getEntries = function(req, res){
journal.find().sort({date: -1}).toArray(function(err, doc){
if(err) throw err;
if(doc.length){
console.log('found entries');
res.json(doc);
} else {
console.log('Returning no Entries.')
res.json(({ "noEntries": true }));
}
})
};
//Post Request
this.addEntry = function(req, res){
console.log('Adding new entry...');
var time = new Date();
var notation = req.body.notes || 'n/a'
journal.insert({ hours: req.body.hours, notes: notation, date: new Date()})
};
//Delete Request
this.deleteEntry = function(req, res){
journal.findOne({"date": new Date(req.body.date)}, function(err, data){
if(err) throw err;
console.log('Removing item _id: ' + data._id);
journal.remove({"date": data.date});
});
};
}
module.exports = entryHandler;
можно проверить через Монго (и console.log), что запись была удалено, и все работает так, как предполагалось. Однако обратный вызов $ http не срабатывает. Функция обратного вызова (loadEntries), используемая для обновления журнала, попадает на страницу.
я могу получить обратный вызов, чтобы огонь, когда я пишу код, как
$http.delete('/api/entry', item).then(function(){ loadEntries() });
Однако, когда я использую этот метод на стороне сервера обработчик не работает должным образом.
Есть ли лучший способ обойти это без тонны дополнительных модулей? Я бы предпочел изучить основы, прежде чем начинать добавлять пакеты по всему месту, выполняя работу для меня.
EDIT:
Я попытался добавить .then (функция() {loadEntries()}); к моему угловому коду, и он не работает.
Я знаю, что мой код выше отличал , но ваше решение было таким, как я написал его изначально, и это не сработало. Я переписал его пару раз и пока не добился успеха. Я также просто дважды проверил и повторил этот код, не работает для меня. –