Nie*_*ost 10 firebase firebase-realtime-database angularfire2
从今天早上开始,我们的Firebase应用程序在将数据写入 Realtime Database实例时出现问题.即使是最简单的任务,例如向对象添加一个键值对也会触发
Error: TRIGGER_PAYLOAD_TOO_LARGE: This request would cause a function payload exceeding the maximum size allowed.
特别奇怪,因为我们的代码或数据库中的任何内容都没有变化超过24小时.
即使是简单的事情
Database.ref('environments/' + envkey).child('orders/' + orderkey).ref.set({a:1})
Run Code Online (Sandbox Code Playgroud)
触发错误.
显然,有效载荷的大小不是问题,但是可能导致这种情况的原因是什么?
数据库结构,按要求
environments
+-env1
+-env2
--+orders
---+223344
-----customer: "Peters"
-----country: "NL"
-----+items
------item1
-------code: "a"
-------value: "b"
------item2
-------code: "x"
-------value: "2"
Den*_*lek 10
好的,我想出来了.该问题与您的写入功能无关,但与写入操作将触发的其中一个云功能无关.
例如,我们有一个结构,如:
/collections/data/abcd/items/a
在JSON中:
"collections": {
"data": {
"abc": {
"name": "example Col",
"itemCount": 5,
"items": {
"a": {"name": "a"},
"b": {"name": "b"},
"c": {"name": "c"},
"d": {"name": "d"},
"e": {"name": "e"},
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
任何写入项目的任何内容都是失败的.API,Javascript,甚至是控制台中的基本写入.
我决定查看我们的云功能并发现:
const countItems = (collectionId) => {
return firebaseAdmin.database().ref(`/collections/data/${collectionId}/items`).once('value')
.then(snapshot => {
const items = snapshot.val();
const filtered = Object.keys(items).filter(key => {
const item = items[key];
return (item && !item.trash);
});
return firebaseAdmin.database().ref(`/collections/meta/${collectionId}/itemsCount`)
.set(filtered.length);
});
};
export const onCollectionItemAdd = functions.database.ref('/collections/data/{collectionId}/items/{itemId}')
.onCreate((change, context) => {
const { collectionId } = context.params;
return countItems(collectionId);
});
Run Code Online (Sandbox Code Playgroud)
它本身没什么,但触发器读取所有项目,默认情况下,即使我们不使用它,firebase云功能也会将整个快照发送给CF. 事实上它也发送了前一个和后一个值,所以如果你(像我们这样)在那一点上有一个TON项目,我猜它尝试发送到云功能的有效载荷太大了.
我从我们的CF和繁荣中删除了计数功能,恢复正常.如果我们根本无法触发,那么不确定"正确"计算方法,但如果我们这样做,我会更新它...
| 归档时间: |
|
| 查看次数: |
2321 次 |
| 最近记录: |