使用ObjectID删除特定记录

时间:2015-03-08 06:57:01

标签: javascript python angularjs mongodb cherrypy

我定义了一个删除功能,其中每行都有一个删除按钮,将该特定记录的ObjectID发送到我的服务器端,因此,此ObjectId将检查存储在数据库中的那个,导致删除该特定记录,到目前为止,我可以在发送数据并检查它方面取得良好进展,但我怀疑ObjectId是发送,需要某种铸造。目前,代码和回复如下;

前端(Index.Html)

<a href="#" class="list-group-item active" >
    List Of Notes
</a>
<a href="#" class="list-group-item" ng-repeat="r in retrieve" >
    {{r.create_at}} 
    <button style="float:right" type="button" ng-click="delete_note(r.ObjectId)" 
     class="btn btn-danger btn-xs">
         Delete  <i class="fa fa-trash"></i>
    </button>
</a>

AngularJS(main.ctrl.js)

$scope.delete_note = function (data_id) {
    $http.get('/delete_note', {
        params: data_id
    }).success(function(data){
        console.log(data)
    });
}

后端(Root.py)

@cherrypy.expose
@cherrypy.tools.json_out()
@cherrypy.tools.json_in()
def delete_note(self,*args,**kwargs):
res2=self.my_app.delete_note(kwargs)
return "<h1>delete success </h1>" +str(res2)
pass

后端(App.py)

def delete_note(self, index):
return self.db.notes.remove({'_id': index})

当前消息显示在Google Chrome控制台中。日志是:

<h1>delete success </h1>{'ok': 1, 'n': 0}"

这显然表明,数据库中没有任何变化,我使用Cherrypy,Mongodb和Angularjs,我们对此表示赞赏。

1 个答案:

答案 0 :(得分:1)

找到确切的问题很难找到,但有一些事情需要引起注意:

  1. 正如nnnnnn已经指出的那样,将button嵌套在一个锚(a)元素中是奇怪的,可能会导致奇怪的问题。
  2. 指令ng-click="delete_note(r.ObjectId)"看起来很奇怪:你的python代码是否真的将_id字段重新映射到名为ObjectId的字段? ObjectId是MongoDB中(默认)键的类型名称的约定是_id
  3. 要查找,请在获取原始数据时查看网络检查器(即$scope.retrieve) - 它发送了什么?调试输出<pre>{{retrieve | json}}</pre>也很有帮助,这样你就可以看到最终的角度
  4. 您显然正在使用GET进行删除。虽然没有什么可以阻止你这样做,但用GET写作是不好的做法。如果可能,请使用HTTP DELETE进行删除。如果由于某种原因完全不可能,至少使用POST。但GET应该是无效的,即它不应该改变服务器状态
  5. REST请求的参数应该是URL的一部分,因此您的删除应该是

    DELETE /notes/:noteId,例如DELETE /notes/54fadec1e4259ded64c7576a

    将识别参数放在其他地方违反了资源网址的想法。