在 node.js 下将 Firebase 参数与 Google Cloud Storage 一起使用
Using Firebase parameters with Google Cloud Storage under node.js
目前没有 node.js Firebase 存储客户端(太糟糕了...),所以我转向 gcloud-node 并使用在 Firebase 控制台中找到的参数。
我正在努力:
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 Server 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 for mobile) , Google 用于服务器端开发的云平台), 不想再搅浑水了。
目前没有 node.js Firebase 存储客户端(太糟糕了...),所以我转向 gcloud-node 并使用在 Firebase 控制台中找到的参数。
我正在努力:
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 Server 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 for mobile) , Google 用于服务器端开发的云平台), 不想再搅浑水了。