首页 > 解决方案 > Firebase Admin SDK 不读取、写入或抛出错误 (Node.js)

问题描述

此问题之前已关闭,告诉我“更新问题,使其仅关注一个问题;” 我不知道问题是什么,如果我这样做了,我就不会发布这个问题。无论如何,我将在这里做一些澄清:

  1. 我以前只使用普通的 Firebase 模块(使用“npm i firebase”导入的模块);之前一切都很完美。该问题与 Firebase Admin SDK 的身份验证(据我所知)有关。我不明白我应该如何将它发送到 Heroku 构建而不显示我的 GitHub 上的服务帐户密钥 JSON 文件。

  2. 至于 GOOGLE_APPLICATION_CREDENTIALS 路径,有没有一种方法可以让我不必在每个会话中都设置它?Heroku 应用程序每天重新启动一次,我需要以某种方式自动执行此输入过程(或完全跳过它)。这就是我目前的理解方式。以下是上一个答案的引述:

当我设置 GOOGLE_APPLICATION_CREDENTIALS 路径时,这不只是在我的本地机器上设置它吗?

环境变量仅适用于已设置它们的单个机器和进程。如果您希望将其设置在另一台机器和进程上,则必须单独安排。根据文档:

将环境变量 GOOGLE_APPLICATION_CREDENTIALS 设置为包含您的服务帐号密钥的 JSON 文件的文件路径。此变量仅适用于您当前的 shell session,因此如果您打开一个新会话,请再次设置该变量。

  1. 我的主要问题如下:“我错误地实现了 Firebase Admin SDK。我该如何以正确的方式做到这一点?”

  2. 即使只是发布一个指向有帮助的指南的链接也将不胜感激(尽管我知道这通常是不鼓励的,因为链接有时会中断)。


原来的:

注意:这是我第一次使用 Firebase Admin SDK,所以我真的不确定我在做什么(虽然我已经使用了很多 Firebase)。

最近,我决定回到我的一个旧的 Discord 机器人,并正确地验证它对 Firebase 的请求(我以前没有这样做过,因为我以前从未从服务器进行过身份验证,并且认为这是不可能的) . 我发现了 Firebase Admin SDK,它听起来非常适合我的需求(该机器人托管在 Heroku 上,作为记录)。

我找到了这个指南:https ://firebase.google.com/docs/admin/setup ,但是有一些事情我无法理解(请注意,这些纯粹是修辞,你不需要回答它们在您的回答中;我只是提供它们,以便您了解我的思维过程):

我找不到任何其他有意义的指南。

我目前设置它的方式一定是错误的,因为读取和写入会静默失败。

Firebase 设置代码:

// Setup Firebase:
const admin = require('firebase-admin');

// Initialize Firebase:
admin.initializeApp({
  credential: admin.credential.applicationDefault(),
  databaseURL: "https://<APP>.firebaseio.com" // I removed the actual <APP> name to ask this question
});

let database = admin.database();

诸如database.ref("test").set("Hello World!");不要更改数据库中的数据之类的事情,并且不会引发任何错误(我也尝试在此末尾​​附加一个 .then 和一个 .catch ;仍然没有)。这是在我切换到 Firebase Admin SDK 之前工作的(我之前只是使用“firebase”模块,而不是我现在使用的“firebase-admin”模块)。读取数据也是如此。

任何帮助,将不胜感激。

标签: firebaseherokufirebase-realtime-databasefirebase-admin

解决方案


这是我的问题:

res.status(200)在异步 firebase 调用之外发送,在 firebase 有机会完成之前终止了请求。不知何故 localhost 允许它正常工作,但是当它托管的东西横向运行时。

所以我有这个

fireabse.database().ref('parent/foo').set('bar');
res.status(200)

我需要这个:

firebase.database().ref('parent/foo').set('bar').then(() => {
   res.status(200);
});

推荐阅读