假设我有一个名为"a"的Firebase项目。在这个项目中,我有一个Cloud Firestore触发的Firebase函数,当Firestore中的文档发生更改时,该函数需要运行。默认情况下,Firebase函数将侦听项目A中Firestore中的更改。
然而,假设我有一个特殊的用例,其中有第二个名为"B"的Firebase项目。我需要项目A中的Firebase函数在项目B中发生的Firestore更改时触发。
这可能吗?Firebase文档确实显示了初始化多个项目,这将允许我连接到多个数据库,例如:
const admin = require("firebase-admin");
const serviceAccount = require("path/to/serviceAccountKey.json");
const secondaryAppConfig = {
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://<DATABASE_NAME>.firebaseio.com"
};
// Initialize another app with a different config
const secondary = firebase.initializeApp(secondaryAppConfig, "secondary");
// Retrieve the database.
const secondaryDatabase = secondary.database();
但这不允许我在我的次要项目上触发Firestore触发的Firebase函数。Firebase函数直接调用firebase-functions
方法,而调用数据库则调用初始化的项目。
const functions = require('firebase-functions');
exports.myFunction = functions.firestore
.document('...')
.onWrite((change, context) => { /* ... */ });
我想做的事情可能吗?或者有人有解决办法吗(除了在项目B中创建这个Firebase函数(?
这是不可能的。云函数触发器只能在部署它们的项目的资源发生变化时触发。这适用于所有类型的触发器,包括Firestore。
如果您希望运行代码以响应另一个项目中的更改,则必须将函数部署到该项目中。
目前,只有写入Cloud Firestore才能触发属于同一项目的Cloud Function。不可能触发在另一个项目中定义的云函数。
例如,典型的解决方案是在辅助项目中调用HTTP函数,然后可以为其配置完整的URL。
我不确定这是否可以在一个代码库中完成——这是因为缺乏经验。我想说,考虑到你的设置,你的调用函数可以通过HTTP调用(文档(触发你的被叫函数
这个可能需要付费的Firebase计划,但我不确定它(来源(