访问同一firebase应用程序项目的多个实时数据库

时间:2018-04-19 15:24:51

标签: firebase-realtime-database angularfire2

我发现了一些explanations关于使用angularfire2连接来自不同应用项目的多个数据库的问题。但我想访问同一项目中的数据库

documentation声明:

// Get the default database instance for an app
var database = firebase.database();

// Get a secondary database instance by URL
var database = firebase.database('https://testapp-1234.firebaseio.com');

如何使用angularfire2执行此操作?

1 个答案:

答案 0 :(得分:1)

我知道你在这里得到了一个有效的答案:https://github.com/angular/angularfire2/issues/1567

测试:“angularfire2”:“^ 5.0.0-rc.6.0”,“firebase”:“^ 4.12.1”

我已经建立了一个极简主义包装,灵感来自我希望分享的#1567。有两种不同或相同项目的方法可以使用多个数据库。

你可能会使用第一个,我真的不明白在多个项目中使用多个数据库的意义。

CreateView

复制 - 粘贴,像通常使用自定义服务一样注入,然后:

@Injectable()
export class AngularFireWrapper {

  // Default database 
  private _firebaseDb = this.afDb.database;

  constructor(private afDb: AngularFireDatabase,
              @Optional() dbName: string) {

    console.log('Hello AngularFireWrapper, db :', dbName || 'default');

    // 1st Method, same project, same auth
    // environment.dbUrls = {
    //   ...
    //   otherDb: 'https://DB_NAME_SAME_PROJECT.firebaseio.com/'
    // }

    if (dbName && environment.dbUrls[dbName]) {
      const app: any = this.afDb.app;
      this._firebaseDb = app.database(environment.dbUrls[dbName]);
    }

    // 2nd Method, other project, different auth =/
    // environment.dbConfigs = {
    //   ...
    //   otherDb: {...} // usual firebase configs 
    // }

    if (dbName && environment.dbConfigs[dbName]) {
      this._firebaseDb = firebase.initializeApp(environment.dbConfigs[dbName], dbName)
        .database();
    }
  }

  db(dbName): AngularFireWrapper {
    return new AngularFireWrapper(this.afDb, dbName);
  }

  object(path: string): AngularFireObject<any> {
    const ref = this._firebaseDb.ref(path);
    return this.afDb.object(ref);
  }

  list(path: string, queryFn?: QueryFn): AngularFireList<any> {
    const ref = this._firebaseDb.ref(path);
    return this.afDb.list(ref, queryFn);
  }
}