$ http.delete回调未在基本CRUD应用程序中触发

时间:2016-05-09 20:07:27

标签: javascript angularjs node.js mongodb express

我有一个基本的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;

我可以通过mongo(和console.log)验证该条目已被删除,并且一切正常。但是$ http回调不会触发。回调函数(loadEntries)即时用于刷新页面上的日志。

当我将代码编写为

时,我可以触发回调
$http.delete('/api/entry', item).then( function(){ loadEntries() } );

但是,当我使用此方法时,服务器端处理程序无法正常工作。

有没有更好的方法可以在没有大量额外模块的情况下实现这一目标?在我开始为我工作的地方添加软件包之前,我会先学习基础知识。

编辑:

我尝试添加.then(function(){loadEntries()});我的角度代码,它不起作用。

3 个答案:

答案 0 :(得分:2)

您需要在$ http调用上调用.then来执行回调函数:

$http({
    method: 'DELETE',
    url: '/api/entry',
    // data: item,
    data: {date: item.date},
    headers: {'Content-Type': 'application/json;charset=utf8'}

  }).then(function() {
      loadEntries()
  });

答案 1 :(得分:0)

无论我尝试什么,我都无法成功拨回电话。但是我的目标是从我的应用程序中删除div,所以我只使用了角度ng-show / hide指令来完成此任务。

答案 2 :(得分:0)

除了.then()之外,看起来服务器代码没有返回任何调用完成状态,例如类似于C#

中的 - Ok / BadRequest(IHTTPctionResult类型)的成功/失败