Firebase Node.js在尝试访问Realtime DB时管理SDK超时

时间:2017-08-22 10:46:14

标签: node.js firebase firebase-realtime-database google-cloud-functions firebase-admin

将Node.js管理员SDK与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);
  });
});

2 个答案:

答案 0 :(得分:0)

来自文档

  

始终使用send(),redirect()或end()结束HTTP函数。否则,您的功能可能会继续运行并被系统强行终止

请参阅https://firebase.google.com/docs/functions/http-events#terminate_http_functions

答案 1 :(得分:0)

这可能取决于您使用的function_map版本,但看起来很熟悉Github issue

解决方案是升级到最新版本的CLI或使用解决方案解决方案:

  1. 转到https://cloud.google.com/console/iam-admin/serviceaccounts
  2. 点击“创建服务帐户”,为其命名(例如模拟器),为其指定项目>所有者角色。检查“提供新的私钥”,选择“JSON”。
  3. 将文件保存在计算机上的某个位置
  4. 运行firebase-tools
  5. 运行export GOOGLE_APPLICATION_CREDENTIALS="absolute/path/to/file.json"