在 Firebase 的不同节点中写入多个对象
Writing Multiple Objects in Different Nodes in 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)
(...)
})
我对实际变量使用字符串连接的显式 ref 声明(如他们的 docs 中所建议的)进行了摆弄,即:
'{
"rooms/' + animalRoom + '": "true",
"members/' + animalRoom + '/' + chrisTheCat '": "true",
"members/' + animalRoom + '/' + hankTheHod '": "true",
}'
然而,这只是将一个大字符串写入根引用。
我已经非常彻底地阅读了 Firebase 文档,并且知道一个可能的解决方案是将子节点附加到请求中的 url
。但是,我正在更新多个节点,并且想实现这一目标。
我也尝试过将 PUT
切换为 PATCH
但实际上什么也写不出来。
有什么想法吗?
回答:这是不可能的。 Parse 不支持 PATCH 请求
对我来说,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 键将是(字面上,没有变量)
- rooms/animalRoom
- members/animalRoom/chrisTheCat
- members/animalRoom/hankTheHog
我不知道你为什么有 animalRoom
和 chrisTheCat
变量..?
布尔值似乎也可以工作(文字,无字符串):
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
文档中查找。
我正在使用 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)
(...)
})
我对实际变量使用字符串连接的显式 ref 声明(如他们的 docs 中所建议的)进行了摆弄,即:
'{
"rooms/' + animalRoom + '": "true",
"members/' + animalRoom + '/' + chrisTheCat '": "true",
"members/' + animalRoom + '/' + hankTheHod '": "true",
}'
然而,这只是将一个大字符串写入根引用。
我已经非常彻底地阅读了 Firebase 文档,并且知道一个可能的解决方案是将子节点附加到请求中的 url
。但是,我正在更新多个节点,并且想实现这一目标。
我也尝试过将 PUT
切换为 PATCH
但实际上什么也写不出来。
有什么想法吗?
回答:这是不可能的。 Parse 不支持 PATCH 请求
对我来说,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 键将是(字面上,没有变量)
- rooms/animalRoom
- members/animalRoom/chrisTheCat
- members/animalRoom/hankTheHog
我不知道你为什么有 animalRoom
和 chrisTheCat
变量..?
布尔值似乎也可以工作(文字,无字符串):
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
文档中查找。