在我的firebase应用程序中有多个数据库实例。我试图在firebase云函数中写入三个数据库实例。根据我的理解,遵循这个文档并不需要为每个数据库实例初始化多个应用程序。我们可以初始化一个并传入数据库url。顺便提一句,我还有另一个具有类似功能的函数,在一个数据库中有触发器事件,并将数据写入其他数据库实例,它工作良好。
import * as functions from "firebase-functions";
import * as admin from "firebase-admin";
const app = admin.app();
export const onStart =
functions.database.instance('my-db-1')
.ref('path')
.onCreate(async (snapshot, context) => {
return await onCreate('my-db-1',snapshot,context);
});
export const onStartDb01 = functions.database.instance('my-db-2')
.ref('path')
.onCreate(async (snapshot, context) => {
return await onCreate('my-db-2', snapshot, context);
});
async function onCreate(dbInstance: string, snapshot:
functions.database.DataSnapshot, context: functions.EventContext):
Promise<any> {
const defaultDb = app.database(defaultDbUrl);
const actvDb = app.database(actvDbUrl);
await defaultDb.ref('path')
.once("value")
.then(snap => {
const val = snap.val();
---do something and write back---
});
await actvDb.ref('path')
.once("value")
.then(snap => {
const val = snap.val();
---do something and write back---
});
return true;
}
但是,当一个db事件被触发时,它会将错误记录如下
错误: FIREBASE致命错误:多次初始化数据库。请确保数据库URL的格式与每个数据库()调用匹配。
发布于 2020-08-27 12:38:36
您需要为每个数据库实例初始化一个单独的app()
。
根据道格的答案,这里应该是这样的:
const app1 = admin.initializeApp(functions.config().firebase)
const app2 = admin.initializeApp(functions.config().firebase)
然后:
const defaultDb = app1.database(defaultDbUrl);
const actvDb = app2.database(actvDbUrl);
https://stackoverflow.com/questions/63622251
复制