首页 > 解决方案 > 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”

Firestore 数据库截图 在此处输入图像描述

标签: node.jsfirebasegoogle-cloud-firestoregoogle-cloud-functions

解决方案


首先,您的正则表达式是错误的。它区分大小写,这意味着屏幕截图中的消息“我喜欢披萨”与“披萨”不匹配。为了使其不区分大小写(从而匹配“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完成。


推荐阅读