在 node.js 下将 Firebase 参数与 Google Cloud Storage 结合使用


目前

没有节点.js Firebase Storage客户端(太糟糕了...),所以我使用Firebase控制台中的参数转向gcloud-node。

我在努力:

var firebase = require('firebase');
var gcloud = require('gcloud')({
    keyFilename: process.env.FB_JSON_PATH,
    projectId: process.env.FB_PROJECT_ID
});
firebase.initializeApp({
    serviceAccount: process.env.FB_JSON_PATH,
    databaseURL: process.env.FB_DATABASE_URL
});
var fb = firebase.database().ref();
var gcs = gcloud.storage();
var bucket = gcs.bucket(process.env.FB_PROJECT_ID);
bucket.exists(function(err, exists) {
    console.log('err', err);
    console.log('exists', exists);
});

哪里:

  • FB_JSON_PATH是为使用 Firebase 服务器 SDK 而生成的 JSON 文件的路径

  • FB_DATABASE_URL有点像 https://app-a36e5.firebaseio.com/

  • FB_PROJECT_ID是Google控制台中Firebase项目的名称:"app-a36e5"

存储桶的 ID 为 FB_PROJECT_ID(在 Firebase 的控制台中,存储选项卡显示 gs://app-a36e5.appspot.com)

当我运行此代码时,我得到:

err null
exists false

但没有其他错误。

我至少期待exists true

一些附加信息:我可以查询数据库(所以我想JSON文件是正确的),并且我设置了存储规则如下:

service firebase.storage {
  match /b/app-a36e5.appspot.com/o {
    match /{allPaths=**} {
      allow read: if true;
      allow write: if request.auth != null;
    }
  }
}

因此,存储上的所有内容都是可读的。

任何想法如何让它工作?谢谢。

这里的问题是您没有正确命名存储桶。存储桶初始化应为:

var bucket = gcs.bucket('app-a36e5.appspot.com'); // full name of the bucket includes the .appspot.com

我假设process.env.FB_PROJECT_ID只是your-bucket部分,您需要获取完整的存储桶名称,而不仅仅是项目 ID(尽管存储桶名称可能process.env.FB_PROJECT_ID + '.appspot.com')。

另外,很抱歉没有提供与Firebase集成的存储 - GCS有一个你已经找到的高质量库(gcloud-node),我们认为这为开发人员提供了最好的故事(Firebase用于移动,Google Cloud Platform用于服务器端开发),并且不想进一步搅浑水。

相关内容

  • 没有找到相关文章

最新更新