NodeJS / Angular Edit Request获取400错误

时间:2015-11-27 05:37:36

标签: javascript angularjs node.js ionic

我正在使用带有NodeJS后端的Ionic / Angular应用程序。我已经制作了一个更新表单,用户可以在其中编辑/删除行。删除有效,但我在编辑功能方面遇到问题。在我的控制台上,会显示:http://localhost:3000/api/todos/%7B%22todo%22:%22NewT%22,%22todo_text%22:%22Text%20EditionT%22%7D。我想知道如何让编辑请求工作。

以下是服务器端请求的代码:

router.put('/api/todos/:_id', function(req, res) {

db.todos.update({
  _id: mongojs.ObjectId(req.body._id)
}, {
  todo: req.body.todo, 
  todo_text: req.body.todo_text
}, {}, function(err, data) {
  res.json(data);
});

});

我的更新表单的代码(删除和编辑功能)。请注意,HomeFac适用于我的services.js,它指向REST API(http://localhost:3000/api/todos/(id号码):

.controller('UpdateCtrl', function($stateParams, $rootScope, $scope, HomeFac) {  
id = $stateParams.id;  

$scope.todo = {}; 

HomeFac.getBeer(id).success(function(data) {  

      var met = data[0]; 

      $scope.todo.todo = met.todo; 
      $scope.todo.todo_text = met.todo_text; 
});

$scope.edit = function(id, inputs) {  

    var inputs = { 
        todo : $scope.todo.todo, 
        todo_text : $scope.todo.todo_text
     };  

    data = angular.toJson(inputs); 

    HomeFac.updateBeer($stateParams.id, data
    ).then(function(id, data) { 
      alert("edited!"); 
    }); 
}; 

$scope.delete = function() { 
   HomeFac.deleteBeer(id);
}; 

}); 

services.js中的啤酒服务

_BeerService.updateBeer = function(todo, _id) { 
 return $http.put(urlBase + '/' + _id, todo); 
}; 

1 个答案:

答案 0 :(得分:1)

可能是因为req.body._idundefined。你可能正在寻找req.params._id。鉴于它未定义,update函数无法找到正确的文档。

注意:您不必创建网址参数_id。 URL参数类似于函数参数:您可以根据需要为它们命名,因此您可能希望将其命名为更方便的内容,例如id