在Firebase中编写不同节点中的多个对象

时间:2015-11-14 17:25:26

标签: javascript json rest parse-platform firebase

我正在使用Firebase REST API将一些对象从Parse Cloud Code添加到多个节点

然而,这会覆盖节点!

(为清晰起见,此处使用硬编码值)

var chatPayload = { 
                   "rooms": 
                     {
                       "animalRoom" : true,
                     },
                    "members": 
                      {
                        "animalRoom": 
                          {
                            "chrisTheCat": true,
                            "hankTheHog"  : true
                           }
                      }
                    }

  Parse.Cloud.httpRequest({
    url: 'https://myapp.firebaseIO.com/' + '.json',
    method: 'PUT',
    body: JSON.stringify(chatPayload)
    (...)
  })

我在实际变量中使用字符串连接,即使用docs中所建议的显式引用声明进行了调整,即:

'{
  "rooms/' + animalRoom + '": "true",
  "members/' + animalRoom + '/' + chrisTheCat '": "true",
  "members/' + animalRoom + '/' + hankTheHod '": "true",
}' 

然而,这只是将一个大字符串写入根参考。

我已经非常彻底地阅读了Firebase文档,并且我知道可能的解决方案是将子节点附加到请求中的url。但是,我正在更新多个节点,并希望实现这一目标。

我也尝试将PUT切换为PATCH,但实际上并没有写任何内容。

有什么想法吗?

答案:这是不可能的。 Parse不支持PATCH请求

1 个答案:

答案 0 :(得分:1)

对我来说,Firebase似乎做了它所承诺的,正确使用PUT和PATCH(如文档所述):

curl -X PUT -d '"Jeff"' users/jeff/name.json
curl -X PUT -d '"Carla"' users/carla/name.json
curl -X PATCH -d '{"jeff/city": "Houston", "carla/city": "Atlantis"}' users.json
curl -X PATCH -d '{"jeff/family": {"children": 1, "parents": 0, "siblings": 1}, "carla/family": {"children": 4, "parents": 2, "siblings": 3}}' users.json
curl -X PATCH -d '{"jeff/family/children": 2, "carla/family/parents": 0}' users.json

结果:

{
  "carla":{"city":"Atlantis","family":{"children":4,"parents":0,"siblings":3},"name":"Carla"},
  "jeff":{"city":"Houston","family":{"children":2,"parents":0,"siblings":1},"name":"Jeff"}
}

这是正确的。

在你的情况下,PATCH键(字面意思是没有变量)

  • 房间/ animalRoom
  • 成员/ animalRoom / chrisTheCat
  • 成员/ animalRoom / hankTheHog

我不知道为什么你有animalRoomchrisTheCat变量..?

布朗人似乎也很有效(字面意义,没有字符串):

curl -X PUT -d '{"animalRoom": false}' test/rooms.json
curl -X PUT -d '{"animalRoom": {"chrisTheCat": false, "hankTheHog": false}}' test/members.json
curl -X PATCH -d '{"rooms/animalRoom": true, "members/animalRoom/chrisTheCat": true}' test.json

结果

{
    "members":{"animalRoom":{"chrisTheCat":true,"hankTheHog":false}},
    "rooms":{"animalRoom":true}
}

这也是正确的。

在您的情况下,在Parse中使用JS,您将发送JSON编码chatPayload。我认为这很好,虽然我不知道Parse如何支持PATCH和PUT。试试这个:

var chatPayload = {
  "rooms/animalRoom": true,
  "members/animalRoom/chrisTheCat": true,
  "members/animalRoom/hankTheHog": true
};

(文字字符串,无变量,布尔值周围没有引号)

Parse很可能不支持PUT和PATCH,也不知道如何处理给定的数据。我相信你可以在Parse.Cloud.httpRequest文档中查找。