Firebase web — закрыть соединение с базой данных реального времени

#javascript #firebase #firebase-realtime-database

#javascript #firebase #firebase-realtime-database

Вопрос:

Я использую Firebase в Интернете с Javascript.
как я могу закрыть соединение с базой данных реального времени?

 var config = {....};
firebase.initializeApp(config);

// get the firebase DB reference
var db = firebase.database().ref();

//doing something
db.push(....);

// close the firebase connection ???
db.close() || firebase.disconnect() || or something like that...
  

Перепробовал множество функций — goOffline() , close() и т.д.
Но ничего не помогает.

Любая помощь была бы оценена … tnx mates

Комментарии:

1. Вызов goOffline() закроет соединение между клиентом и базой данных. Как вы пришли к выводу, что его вызов не закрывает соединение?

2. Ссылка на объект firebase или databaseREF? можете ли вы добавить код? возможно, я неправильно это реализую.. @FrankvanPuffelen

Ответ №1:

Попробуйте это-

 firebase.initializeApp(config);

// Kill this firebase app.
firebase.app().delete().then(function() {
  firebase.initializeApp(newConfig);
});
  

goOffline() закроет соединение, но Firebase продолжит работать локально, а приложение останется в памяти.

Комментарии:

1. как повторно подключить bro?

Ответ №2:

Попробуйте использовать:

 firebaseRef.off();
  

Это приведет к прекращению вашего соединения с firebase и прекращению связи с базой данных.

Ответ №3:

Для JSv9, как сказал @Frank van Puffelen, вызов goOffline(db)

Отключается от сервера (все операции с базой данных будут завершены в автономном режиме).

Цитируется из официального документа.

Обратите внимание, что db здесь Database вместо DatabaseRef . Возможно, вы неправильно вызвали это.

Я искал это для этой jest ошибки: A worker process has failed to exit gracefully and has been force exited. This is likely caused by tests leaking due to improper teardown. Try running with --detectOpenHandles to find leaks. (Я сделал пометку здесь в моей базе знаний.) И добавление goOffline(db) в afterAll() фактически решило ее.

Ответ №4:

Для информации других, вот как я отключаю firebase после получения необходимых данных.

 import {
  getDatabase,
  goOnline,
  goOffline,
  get,
  child,
  ref,
} from 'firebase/database';

// something like this
const db = getDatabase()
try {
  goOnline(db);
  const snapshot = await get(child(ref(db), `visitors/${id}`));
  if (snapshot.exists()) {
    const data = snapshot.val();
  } else {
    console.log('No data available');
  }
} catch (error) {
  console.log('error', error);
}
goOffline(db);
  

Ответ №5:

Похоже, вы пытаетесь выполнить эту операцию на стороне сервера с помощью КЛИЕНТСКОЙ СТОРОНЫ conf.

Правильно ли вы настроили конфигурацию для firebase.initializeApp({}) в качестве сервера?

Посмотрите документацию здесь:https://firebase.google.com/docs/database/server/start#server-sdk-authentication

У нас была такая же проблема, но все это исчезло, когда мы правильно настроили все в соответствии с документацией и использовали ее с «Аутентификацией с ограниченными привилегиями».

 var firebase = require("firebase");

// Initialize the app with a service account, granting admin privileges
firebase.initializeApp({
  databaseURL: "https://databaseName.firebaseio.com",
  serviceAccount: "path/to/serviceAccountCredentials.json"
});

// As an admin, the app has access to read and write all data, regardless of Security Rules
var db = firebase.database();
var ref = db.ref("restricted_access/secret_document");
ref.once("value", function(snapshot) {
  console.log(snapshot.val());
});
  

Комментарии:

1. пожалуйста, обратите внимание — как вы закрываете соединение с базой данных реального времени?

2. Firebase выпустила пакет на стороне сервера-> firebase.google.com/docs/admin/setup Это должно решить проблему.