FIREBASE致命错误:数据库已多次初始化 [英] FIREBASE FATAL ERROR: Database initialized multiple times

查看:54
本文介绍了FIREBASE致命错误:数据库已多次初始化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的Firebase应用程序中有多个数据库实例.我正在尝试写入Firebase云函数中的三个数据库实例.按照以下文档的理解不是需要为每个数据库实例初始化多个应用.我们可以初始化一个并传入数据库URL.附带说明一下,我还有另一种功能与类似的功能,其中我在一个数据库中具有触发事件,并将数据写入其他数据库实例,并且运行良好.

I have multiple database instances in my firebase app. I am trying to write into three database instances in firebase cloud functions. My understanding by following this document is no need to initialize multiple apps for each database instance. We can initialize one and pass in the database url. As a side note, I have another function with similar kind of functionality where I have trigger event in one database and write data to other database instance and it works fine.

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事件时,它将记录以下错误

But when a db event is fired, it logs the error as below

错误:FIREBASE致命错误:数据库已多次初始化.请确保数据库URL的格式与每个database()调用相匹配.

Error: FIREBASE FATAL ERROR: Database initialized multiple times. Please make sure the format of the database URL matches with each database() call.

推荐答案

您需要为每个数据库实例初始化一个单独的 app().

You'll need to initialize a separate app() for each database instance.

基于道格的回答此处应该是这样的:

Based on Doug's answer here that should be something like this:

const app1 = admin.initializeApp(functions.config().firebase)
const app2 = admin.initializeApp(functions.config().firebase)

然后:

const defaultDb = app1.database(defaultDbUrl);
const actvDb = app2.database(actvDbUrl);

这篇关于FIREBASE致命错误:数据库已多次初始化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆