функции firebase перестали работать после iam - PullRequest
0 голосов
/ 16 марта 2020

Я пытаюсь сделать что-то невероятно простое, но из-за этой неверной конфигурации IAM, базы данных в реальном времени и облачных функций я теряю часы работы в таком простом мире, как привет.

У меня уже есть заполненная база данных (более 300 предметов):

enter image description here

, тогда у меня развернута следующая функция в облачной базе:

const actions = [];
const igDatabase = require('firebase-admin').initializeApp({
   serviceAccountId: 'actionkeeper@igibo-b0b27.iam.gserviceaccount.com'
}).database("https://igibo-b0b27.firebaseio.com/");

let lastMapRefresh = 0;
let lastUpdateFirebase = 0;

function refreshActions(afterRefresh) {
   console.log("refreshing actions");
   igDatabase.ref('actions/').orderByChild('timestamp').startAt(lastMapRefresh).once('value').then(function(data) {
      if (data != null && data.exists()) {
         let bef = actions.length;
         actions.length = 0;
         actions.push(data.val());

         lastMapRefresh = new Date().getTime();        
         afterRefresh();
      }
      console.log("actions refreshed before: " + bef + " now: " + actions.length);
   }).catch(function(error) {
      console.error("Error: " + JSON.stringify(error));
   });
}

exports.decrementAction = (req, res) => {
refreshActions(function() {});
}

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

правила Firebase для этого узла :

{
   "rules":{

      "actions":{
         ".indexOn":[
            "timestamp"
         ],
         ".read":"auth != null",
         "$act":{
            "countdown":{
               ".write":"auth != null && data.val() - newData.val() == 1 && newData.val() >= 0"
            }
         }
      }
}
}

поэтому любой зарегистрированный пользователь может прочитать

в консоли Google IAM, у меня есть enter image description here

, поэтому учетная запись службы должна имеют права администратора для базы данных ...

, но при запуске этой функции ВСЕГДА ВОЗВРАЩАЕТСЯ НУЛЬ data

почему?

1 Ответ

0 голосов
/ 16 марта 2020

Ваш код, по-видимому, фактически не отправляет ответ клиенту. Вот ваша функция:

exports.decrementAction = (req, res) => {
    refreshActions(function() {});
}

Ни разу он не использует res для отправки ответа. После 60-х по умолчанию время всегда истекает, я застреваю, ожидая, когда вы позвоните res.send() или что-то подобное.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...