powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Firebase
3 сообщений из 3, страница 1 из 1
Firebase
    #39626688
Andrej_f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример из документации: https://firebase.google.com/docs/reference/js/firebase#.initializeApp
Код: javascript
1.
2.
3.
4.
5.
6.
7.
firebase.initializeApp({
  apiKey: "AIza....",                             // Auth / General Use
  authDomain: "YOUR_APP.firebaseapp.com",         // Auth with popup/redirect
  databaseURL: "https://YOUR_APP.firebaseio.com", // Realtime Database
  storageBucket: "YOUR_APP.appspot.com",          // Storage
  messagingSenderId: "123456789"                  // Cloud Messaging
});


Вопрос: как отловить ошибку при неправильных параметрах?
Пояснение: если намеренно испортить любой из параметров подключения, коннект к базе не происходит, но в приложении ошибки не фиксируются - ни при обертывании этого примера в try-catch, ни при анализе firebase.FirebaseError, а в консоли браузера, однако ошибки фиксируются, например: авторdatabase.js?5f63:162 GET https://error-address/.lp?start=t&ser=111&cb=7&v=4 net::ERR_NAME_NOT_RESOLVED
...
Рейтинг: 0 / 0
Firebase
    #39627156
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Firebase
    #39627208
Andrej_f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA, спасибо, но я и так запарился тонны интернета рыть. Скуль был последней надеждой :)

Ответ я уже нашел сам. Может, кому пригодится
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
/*
Создаем объекты базы данных
параметры инициализации (optinons для initializeApp()):
{
  apiKey: "AIza....",                             // Auth / General Use         обязателен
  databaseURL: "https://YOUR_APP.firebaseio.com", // Realtime Database          необязателен, но см. ниже
  authDomain: "YOUR_APP.firebaseapp.com",         // Auth with popup/redirect   необзательны, если не юзаются сервисы
  storageBucket: "YOUR_APP.appspot.com",          // Storage
  messagingSenderId: "123456789"                  // Cloud Messaging
  }
*/
export let firebaseApp = null;  // firebase.app.App
export let db = null;           // firebase.database.Database

/*
подключаемся к БД
*/
// читаем файл с параметрами БД
fetch('conf/fbdb.conf')
  .then(function(response) {
    // парсим файл:
    // при отсутствии файла (response.status: 404) или пустом файле (response.status: 200) скакнем в .catch
    // с error.message: JSON.parse: unexpected character at line 1 column 1 of the JSON data
    // и без error.code (?)
    return response.json();
  })
  .then(function(optinons) {
    // получаем firebase.app.App
    // при отсутствии в optinons apiKey скакнем в .catch c error.code: "auth/invalid-api-key"
    return Firebase.initializeApp(optinons);
  })
  .then(function(app) {
    // Проверять корректность полученного firebase.app.App по Firebase.apps.length, как советуют в интернете,
    // не получается, ибо Firebase.apps.length = 1 даже при неправильном apiKey.
    // Проверять корректность firebase.app.App будем с помощью фейковой аутентификации
    // при неверном apiKey скакнем в .catch, ветку else с error.code: "auth/invalid-api-key"
    app.auth()
      .signInWithEmailAndPassword('fake@ema.il', 'password')
      .catch(function (error) {
        if( error.code == "auth/user-not-found" ){
          // firebase.app.App инициализировано нормально
          firebaseApp = app;	// firebase.app.App получили

          try {	// без этого при отсутствии databaseURL получим ошибку в консоли, но в catch'и не зайдем
            let dbt = firebaseApp.database();  // получаем firebase.database.Database
            // если отстуствует databaseURL в optinons для initializeApp или он не передан в firebaseApp.database(),
            // то мы скакнем в catch с error.message:
            // "FIREBASE FATAL ERROR: Can't determine Firebase Database URL.  Be sure to include databaseURL option when calling firebase.intializeApp(). "
            // и без error.code (?)

            // проверять подключение будем делая попытку записи в "sessions"
            dbt.ref("sessions").push({
              // если databaseURL в optinons для initializeApp правильный, мы скакнем в .push.catch
              // с error.code: "PERMISSION_DENIED"
              startedAt: Firebase.database.ServerValue.TIMESTAMP
              // если databaseURL в optinons для initializeApp поврежден,
              // в консоли браузера мы получим разовую ошибку:
              // Firefox не может установить соединение с сервером wss://YOUR_APP.firebaseio.coma/...
              // и периодические предупреждения:
              // Загрузка <script> по адресу «https://YOUR_APP.firebaseio.coma/...» не удалась.
              // но в .catch'и мы не уйдем
            })  // dbt.ref("sessions").push
            .catch(function(error){
              // если БД подключена нормально, получим error.code: "PERMISSION_DENIED" здесь
              // и можем активировать кнопку логона в приложение
              if( error.code == "PERMISSION_DENIED" ) {
                db = dbt;	// firebase.database.Database получили
                eventBus.$emit('firebase-init');	// активировать кнопку логона в приложении
              }
            });	// db.ref("sessions").push.catch
          }
          catch(error) {
            console.error('Connect to server error: (%s): %s', error.code, error.message);
            eventBus.$emit('firebase-init', error.message); // покажем ошибку
          }
        }	// 	if( error.code == "auth/user-not-found" )
        else {
          // неверный apiKey
          console.error('Connect to server error: (%s): %s', error.code, error.message);
          eventBus.$emit('firebase-init', error.message);
        }
      });	// .signInWithEmailAndPassword('fake@ema.il', 'password').catch

  })  // .then(function(app)
  .catch(function(error){
    console.error('Connect to server error: (%s): %s', error.code, error.message);
    eventBus.$emit('firebase-init', error.message);
  });
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Firebase
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]