Тайм-ауты SDK администратора Firebase Node.js при попытке доступа к базе данных в реальном времени

Используя SDK администратора Node.js с функциями Firebase, я получаю тайм-аут всякий раз, когда пытаюсь получить доступ к базе данных реального времени. Это происходит только при локальном тестировании функции (firebase serve --only functions,hosting) и когда приложение по умолчанию инициализируется с использованием файла functions.config().firebase.

Это новое поведение, которое началось буквально пару дней назад. Однако, если я попытаюсь инициализировать приложение по умолчанию с файлом serviceAccount.json, все будет работать как положено.

Я использую firebase-admin версии 4.2.1 и firebase-functions версии 0.5.9.

Я написал простую функцию http triggered, которая не работает из-за тайм-аута:

const functions = require('firebase-functions');
const admin = require('firebase-admin');

admin.initializeApp(functions.config().firebase);
const db = admin.database();

exports.testDbConnection = functions.https.onRequest((req, res) => {
  return admin.database().ref().once('value')
  .then(function(snapshot) {
      res.json(snapshot);
  }).catch(function(error) {
      res.json(error);
  });
});

person NoyG_Optimove    schedule 22.08.2017    source источник
comment
Можете ли вы попробовать установить переменную среды GOOGLE_APPLICATION_CREDENTIALS так, чтобы она указывала на файл JSON вашей учетной записи службы?   -  person Hiranya Jayathilaka    schedule 23.08.2017
comment
Да, это то, что я сделал, чтобы решить тайм-аут базы данных в реальном времени. На самом деле мне было интересно, если это ошибка в SDK администратора/функций firebase, которую следует поднять.   -  person NoyG_Optimove    schedule 23.08.2017
comment
Проверьте этот ответ.   -  person Pravin Divraniya    schedule 09.08.2019


Ответы (2)


из документации

Всегда завершайте функцию HTTP с помощью send(), redirect() или end(). В противном случае ваша функция может продолжать работать и быть принудительно завершена системой.

см. https://firebase.google.com/docs/functions/http-events#terminate_http_functions

person mohamad rabee    schedule 22.08.2017
comment
Спасибо за ответ, но res.json() совпадает с res.send, за исключением отправки ответа в виде JSON, а не текста. Я ознакомился с документацией, и, как сказано, все работало нормально, пока пару дней назад в код не было внесено никаких изменений. - person NoyG_Optimove; 22.08.2017