簡體   English   中英

訪問子 firebase 數據庫時的“app”屬性是什么(javascript)

[英]What is `app` property when access child firebase database (javascript)

這是我初始化 firebase 的文件:

export default class {
  static parent = RNFirebase.initializeApp();
  static child = null;

  constructor() {
    child = this.parent.database('child-database-url');
  }
}

在另一個文件中,我將其用作:

import FDBS from '../initializer';

FDBS.child.app.database().ref('orders').once("value", data => {
  console.log(data);
});

這行代碼讓我感到困惑: FDBS.child.app.database().ref(實際上是.app
為什么我需要訪問這個屬性來獲取數據,實際上我想要獲取的是能夠編寫如下代碼: FDBS.child.database().ref('orders').once(...

首先,讓我們修復有關initializer.js文件中“靜態”變量的語法錯誤。 對於這種簡單的數據結構,不要使用 class,而只需導出 object。

import RNFirebase from '@react-native-firebase/app';
import '@react-native-firebase/database';

// inits & returns the default FirebaseApp instance
const parent = RNFirebase.initializeApp(); // or RNFirebase.app() if initialized automatically

// gets a FirebaseDatabase instance that points to 'child-database-url'
const child = parent.database('child-database-url');

export default {
  parent, // this is a FirebaseApp object
  child   // this is a FirebaseDatabase object
}

現在,如上面的代碼片段所示,您的parent object 是FirebaseApp object 的一個實例, child object 是FirebaseDatabase object 的一個實例。

在加載到FDBS中的代碼中,您訪問FDBS.child.app參考),它返回與該FirebaseDatabase實例關聯的FirebaseApp object - 在您的情況下,此 object 是FDBS.parent

由於這兩個對象具有不同的類型,我建議選擇導出兩個FirebaseApp實例或兩個FirebaseDatabase實例。

導出FirebaseApp實例

根據您的問題,您似乎期望child object 也是FirebaseApp object 因為您想調用FDBS.child.database().ref(...)

import RNFirebase from '@react-native-firebase/app';
import '@react-native-firebase/database';

const parent = RNFirebase.initializeApp(/* config */); // or RNFirebase.app()
const child = RNFirebase.initializeApp({
  ...parent.options, // copies everything from the default app's configuration
  databaseURL: 'child-database-url' // but overwrites the value of databaseURL
});

export default {
  parent, // this is a FirebaseApp object that uses the default "parent" database
  child   // this is a FirebaseApp object that uses the "child" database
}

您將按如下方式使用它:

import FDBS from '../initializer';

FDBS.child.database().ref('orders').once("value", data => {
  console.log(data);
});

當您涉及身份驗證時,此方法會引入一個問題。 如果用戶登錄您的應用程序,他們將登錄默認的 FirebaseApp 實例,而不是FDBS.child使用的實例(除非您明確這樣做)。 因此,我推薦另一種方法。

導出FirebaseDatabase實例(推薦)

import RNFirebase from '@react-native-firebase/app';
import '@react-native-firebase/database';

const defaultApp = RNFirebase.initializeApp(/* config */); // or RNFirebase.app()

const dbParent = defaultApp.database();
const dbChild = defaultApp.database('child-database-url');

export default {
  // app: defaultApp, // (if you want to export the FirebaseApp object too)
  parent: dbParent, // this is a FirebaseDatabase object that points to the default "parent" database
  child: dbChild    // this is a FirebaseDatabase object that points to the "child" database
}

您將按如下方式使用它:

import FDBS from '../initializer';

FDBS.child.ref('orders').once("value", data => {
  console.log(data);
});

注意:不要忘記處理錯誤。 我鼓勵使用承諾而不是回調。

編輯以回應您的評論

你沒有顯示 RNFirebase 的來源,但你應該能夠訪問你的數據庫

let initapp = RNFirebase.initializeApp()
let db = initapp.database('url')
db.ref....

現在你已經以迂回的方式做到了

child = this.parent.database(

如果你檢查一下你是如何定義父級的,它基本上就像我上面提供的片段。

所以你可以更簡潔一點,少一些循環。

--

來自官方文檔, https://firebase.google.com/docs/reference/js/firebase.database.Database#app

與數據庫服務實例關聯的應用程序。

其中應用程序具有數據庫屬性,其中包括https://firebase.google.com/docs/reference/js/firebase.app.App#database

獲取當前應用程序的數據庫服務。 例子

var database = app.database();
// The above is shorthand for:
// var database = firebase.database(app);  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM