我刚从FirebaseDatabase切换到FireStore,所以我必须重写一些云函数以匹配FireStore语法,但问题是它不能像FirebaseDatabase那样工作。
这是我的代码:
exports.addMessageTest = functions.firestore.document('/messages/{id}').onCreate(async (req, res) => {
const original = req.query.text;
const writeResult = await admin.firestore().collection('messages').add({original: original});
res.json({result: `Message with ID: ${writeResult.id} added.`});
});
基本上,每当在声明的路径中创建新文档时,我都想触发一个事件,但我注意到,即使我尝试过,这个函数也从未触发过:
- 直接在数据库中创建新文档
- 使用swift创建新文档(创建成功,但未触发函数(
try? db.collection("messages").document().setData(data)
那么这里的问题是什么?
您正在将Firestore的onCreate()
后台云函数编码为HTTPS云函数。
req
和res
不表示onCreate()
后台Cloud Function中的Express.js请求和响应对象。
看看文档:回调函数的第一个参数是DocumentSnapshot
,代表触发CF的Firestore文档,第二个参数是CF的上下文。
此外,请注意,与HTTPS CF相比,后台CF应以不同的方式终止。请参阅文档了解更多详细信息,因为正确管理CF的生命周期非常重要。