node.js - firestore 云功能未触发
问题描述
我是 Firebase 云功能的新手。因此,我按照 firebase youtube 频道中的教程进行操作。所以,我创建了一个在添加firestore文档时应该触发的函数,但它没有触发。
这是功能
const functions = require("firebase-functions");
const admin = require("firebase-admin");
admin.initializeApp();
exports.whenAddData = functions.firestore
.document("chats/{userId}")
.onCreate((change, context) => {
const msg = change.data().msg;
const modifiedMsg = addImoji(msg);
console.log("data changing");
return change.ref({ msg: modifiedMsg });
});
const addImoji = (msg) => {
return msg.replace(/\bPizza\b/g, " ");
};
firebase 功能版本:“^3.6.1”
解决方案
首先,您的正则表达式是错误的。它区分大小写,这意味着屏幕截图中的消息“我喜欢披萨”与“披萨”不匹配。为了使其不区分大小写(从而匹配“Pizza”、“pizza”、“piZZA”...)i
,在末尾添加标志:
const addImoji = (msg) => {
return msg.replace(/\bpizza\b/gi, "");
};
其次,您的函数返回一个数据库引用。它实际上并没有通过调用set()
or来存储新数据update()
。您的代码应该是:
return change.ref.update({ msg: modifiedMsg });
任何异步 Firebase 函数都应该返回一个 Promise(并update()
返回一个 Promise)。如果没有,该函数将无法正确终止。
通过返回 的结果update
,您的函数将继续运行,直到将 new 写入数据库的异步工作msg
完成。
推荐阅读
- oauth-2.0 - Google Home 授权码和使用 Google 帐户的身份验证
- keras - Keras:在某一层后停止渐变
- security - 禁用 Get-NetLocalGroup
- git - 子模块存档在 gitlab
- multithreading - 在弹簧控制器中测试线程 lambda 函数
- c - 使用 3D 数组到线性索引宏进行三维泊松乘法时出现分段错误
- ios - 在 iOS 应用程序中运行 C 守护程序
- webpack - wepack4 vuejs ssr es5 : (0 , _app.createApp) 不是函数
- javascript - Angularjs和材料设计:无法实例化模块ngMaterial
- python - requirements.txt 中的 python 版本与 setup.py 中的安装要求有关