【问题标题】:Firebase simple REST DELETE?Firebase 简单的 REST DELETE?
【发布时间】:2016-01-12 14:38:47
【问题描述】:

我在 firebase 中的数据如下所示。我正在阅读https://www.firebase.com/docs/rest/api/,它很奇怪,我正在尝试删除一个项目。

burning-*

contacts  

     -K7qAf6egBeg5l3e_Gjc
       name: "Ind"
       phonenumber: "(408) ***-***"
       uid: "1"

     -K7qB8Afu7bIm9LUtV68
       name: "Paul Bhayya"
       phonenumber: "(408) ***-***"
       uid:"2"

在 angular.js 中,我在我的自定义指令中进行此调用。

$http.delete(Firebaseurl + '/contacts/'+scope.contact.name+'/.json').then(function(result) {
    console.log(result);
});

api 对我来说没有意义,我发现问题可能是我的数据现在嵌套在一个带有奇怪 ID 的键中,即-K7qAf6egBeg5l3e_Gjc

所以我想知道如何通过键name 调用删除项目,所以如果单击客户端该联系人说Ind 被单击然后我告诉 Firebase 删除具有该名称的联系人。也许 ID 更好,但不管怎样都行。

编辑:

仅供参考,我解析了 Firebase 对象 selectedContacts 是对象的 GET 方法的结果。对于我的角度代码,它的格式不是很好,所以我把它变成了一个干净的对象数组,我用它来与其他数据集进行比较以传递给$scope

Object.keys(selectedContacts.data).forEach(function(key) {
  selectedContactsArray.push(selectedContacts.data[key]);
});

selectedContactsArray.filter( function( item ) {
    for( var i=0, len=usersContacts.length; i<len; i++ ){
        if( usersContacts[i].name == item.name ) {
            usersContacts[i]['selectedContact'] = true
        }
    }
});

【问题讨论】:

  • 向节点的 URL 发送 HTTP DELETE 请求应该删除该节点。你遇到了什么问题?
  • 建立正确的 uri 以删除正确的节点。
  • 啊,我没看到。 scope.contact.name 可能与节点的键不同。您的问题是如何查找给定scope.contact.name 的节点的键?
  • 是的,提供更多上下文我解析了对象,看看修改后的问题。
  • 您将从 Firebase 获得的键+值对 (selectedContacts.data) 转换为仅包含值的数组。然后稍后您需要删除该项目的密钥。不放弃密钥不是一种选择吗?

标签: angularjs rest firebase


【解决方案1】:

按用户名获取用户:

...firebaseio.com/contacts.json?orderBy="name"&equalTo="Ind"&limitToFirst=1

你必须为你的安全规则添加一个索引:

{
  "rules": {
    "contacts": {
      ".indexOn": ["name"]
    }
  }
}

有了这个索引,查询会返回一个像这样的对象:

{
  "-K7qAf6egBeg5l3e_Gjc": {
     "name": "Ind",
     "phonenumber": "(408) ***-***",
     "uid": "1"
  }
}

您可以从那里读取密钥,然后针对其执行 REST DELETE 请求

...firebaseio.com/contacts/-K7qAf6egBeg5l3e_Gjc.json

但正如您问题的 cmets 中所讨论的,您也可以使用 AngularFire 来做同样的事情。

【讨论】:

  • 谢谢,这似乎解决了难题的缺失部分,我能够抓取对象并与现有对象进行比较,以查看哪些联系人是所选联系人。如果用户取消选择联系人,请使用上述解决方案删除节点。太好了,但我认为我可能搞砸了一些事情,因为我正在使用 GET 请求进行测试并且我收到了这个contacts.json?orderBy=%22name%22&amp;equalTo=%22Tatiah%22&amp;limitToFirst=1 400 (Bad Request),所以它将" 解析为%22 不确定我是否搞砸了什么,或者它是否无效,我会继续努力的。
  • 原始请求看起来像$http.get(Firebaseurl + '/contacts.json?orderBy="name"&amp;equalTo="'+scope.contact.name+'"&amp;limitToFirst=1')
  • 哦,我必须索引数据!我不知道,一定错过了它,但似乎文档应该更清楚地提及它非常重要。不过我的错,只是 Firebase 文档上的信息过多,但我的意思是他们提供了很多东西,所以我真的不能抱怨太多。
猜你喜欢
  • 2020-03-07
  • 2014-02-25
  • 1970-01-01
  • 1970-01-01
  • 2014-12-18
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 2014-04-25
相关资源
最近更新 更多