【问题标题】:Writing Multiple Objects in Different Nodes in Firebase在 Firebase 的不同节点中编写多个对象
【发布时间】:2015-11-14 17:25:26
【问题描述】:

我正在使用 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)
    (...)
  })

我已经使用字符串连接实际变量,即:

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

但是这只是将一个大字符串写入根引用。

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

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

有什么想法吗?

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

【问题讨论】:

  • 在 REST 方面,这就是 PUT 应该做的:用给定的数据覆盖给定的资源。 Firebase 是做什么的,我不知道。如果要覆盖“子资源”,请将路径名更改为 my/collection/item.json 等。
  • @Rudie 当我将它切换到PATCH 时,请求实际上并没有做任何事情.....
  • @Rudie 问题是我正在尝试写入多个路径
  • 文档说你应该使用客户端的update() 方法:firebase.com/docs/web/guide/saving-data.html#section-update 我不知道update() 做了什么,但我相信你可以找到。或者使用PATCH,嗯..firebase.com/docs/rest/guide/saving-data.html#section-update
  • @Rudie 我其实试过PATCH,但是数据不受影响

标签: javascript json rest parse-platform firebase


【解决方案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/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 文档中查找。

【讨论】:

  • 如果我错了,请纠正我,但我注意到您正在单独创建路径并 然后 进行多次更新。我想要做的是一次创建房间及其成员(一次创建多条路径)。顺便说一句,感谢您的回答
  • 您可以一次创建所有内容,也可以像我一样分部分创建。只有PATCH 请求与我的回答相关。剩下的就是数据设置了。正如您在 PATCH 请求中看到的那样,我一次编辑多个资源。
  • 我无法让它工作。我一次又一次地尝试,调整,但正如我在问题 cmets 中提到的,PATCH 在没有时不会影响我的数据时有一些
  • 另外,我用的是javascript,不太习惯,curl也不行,请用javascript回答
  • 我最后更新了我的答案。当您对 JS/Parse 不太熟悉时,您如何使用它制作应用程序..?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-06
  • 2018-10-18
相关资源
最近更新 更多