#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 Это должно решить проблему.