Firestore onWrite触发时eventType未返回update/delete类型问题
问题原因
你当前使用的是Firestore的onWrite通用触发器,该触发器默认覆盖文档新建、更新、删除三类写入操作,按照SDK设计,它的context.eventType字段固定返回google.firestore.document.write,不会返回细分的update/delete/create类型,属于正常表现,不存在配置错误。
不同Firestore触发器对应的固定eventType对照:
onCreate触发器:固定返回google.firestore.document.createonUpdate触发器:固定返回google.firestore.document.updateonDelete触发器:固定返回google.firestore.document.deleteonWrite触发器:固定返回google.firestore.document.write
操作类型判断方案
如果需要在onWrite触发器内区分当前触发的具体操作类型,无需依赖eventType字段,直接判断传入的文档快照存在状态即可,参考实现:
exports.useTest = functions.firestore .document("users/{userId}") .onWrite(async (handle, context) => { console.log("before", handle.before.data()); console.log("after", handle.after.data()); // 判定操作类型 const isCreate = !handle.before.exists && handle.after.exists; const isUpdate = handle.before.exists && handle.after.exists; const isDelete = handle.before.exists && !handle.after.exists; // 后续按操作类型走不同逻辑 if (isCreate) { // 新建文档逻辑 } if (isUpdate) { // 更新文档逻辑 } if (isDelete) { // 删除文档逻辑 } });
如果不需要在同一个函数内处理三类操作,也可以直接拆分使用onCreate/onUpdate/onDelete单独绑定触发器,此时context.eventType会返回对应细分类型值。
内容的提问来源于stack exchange,提问作者Achraf
相关产品推荐
相关产品推荐

