firebase - 带有 Google 操作的 Firebase 存储
问题描述
我在将我的 Firebase 存储与我的谷歌操作连接时遇到了一些问题。我需要能够“下载”内部的 json 文件,以便能够读取并挑选出用户在调用操作时提供的数据可能需要什么。
下面是我目前拥有的代码,来自我发现的不同 API 和其他 stackoverflow 问题。
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const Firestore = require('@google-cloud/firestore');
const firestore = new Firestore();
var storage = require('@google-cloud/storage');
const gcs = storage({projectId: 'aur-healthcare-group'});
const bucket = gcs.bucket('gs://aur-healthcare-group');
admin.storage().bucket().file('aur-healthcare-group/aur_members.json').download(function(errr, contents){
if(!err){
var jsObjext = JSON.parse(contents.toString('utf8'));
}
});
我收到的当前错误是"code":3,"message":"Function failed on loading user code。这可能是由于用户代码中的错误。错误消息:错误:请检查您的函数日志以查看错误原因。当我检查日志时,我只会再次收到上述消息。
我相信我没有正确访问我的 firebase 存储,并且无法找到有关如何正确访问它的好资源。有人可以给我一个如何正确访问存储的示例,以便我能够将其应用到我的项目中吗?
解决方案
由于您在 Firebase Functions 中运行,因此您不需要@google-cloud/storage
直接要求依赖项。相反,您可以通过以下方式获得经过正确身份验证的存储组件admin.storage()
之后,您不应该将文件下载到您的函数中,因为您最好通过readStream
.
关于您现有的代码错误,可能是因为您正在检查if (!err)
回调变量何时为errr
.
我过去做过这个,这是我如何实现它的代码片段。它是专门用 Typescript 编写的,但如果你直接使用它,我认为你应该能够将它移植到 JS。
import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin'
import { Bucket } from '@google-cloud/storage';
admin.initializeApp()
const db = admin.firestore()
const bucket = admin.storage().bucket('project-id.appspot.com') // Use your project-id here.
const readFile = async (bucket: Bucket, fileName: string) => {
const stream = bucket.file(fileName).createReadStream();
return new Promise((resolve, reject) => {
let buffer = '';
stream.on('data', function(d: string) {
buffer += d;
}).on('end', function() {
resolve(buffer)
});
})
}
app.handle('my-intent-handler', async (conv) => {
const contents = await readArticle(bucket, 'filename.txt')
conv.add(`Your content is ${contents}`)
})
exports.fulfillment = functions.https.onRequest(app)
推荐阅读
- python - 使用 sqlalchemy 自动加载加载表时出现问题
- elasticsearch - Elasticsearch 错误语言检测
- postgresql - 了解如何使用嵌套循环优化 sql 查询(例如,搜索每个部门员工的最高工资)
- flutter - Flutter,如何对包含 AppLocalization(多语言)的 Widget 进行单元测试?
- ios - 快速创建框架时获取 AppDelegate 参考
- reactjs - 在反应中发送发布请求的问题
- javascript - 反应元素的多轮播映射
- java - 在无头模式下通过 RemoteWebDriver 和 chrome 下载文件
- kubernetes - Kubernetes 中本地 PersistentVolume 的 PersistentVolumeClaim 策略是什么?
- javascript - 如何遍历所有可见的 html 元素并隐藏它们?