我想为Firebase创建多个云功能,并从一个项目同时部署它们.我还想将每个函数分成一个单独的文件.目前我可以创建多个函数,如果我将它们都放在index.js中,例如:
exports.foo = functions.database.ref('/foo').onWrite(event => {
...
});
exports.bar = functions.database.ref('/bar').onWrite(event => {
...
});
Run Code Online (Sandbox Code Playgroud)
但是我想将foo和bar放在单独的文件中.我试过这个:
/functions
|--index.js (blank)
|--foo.js
|--bar.js
|--package.json
Run Code Online (Sandbox Code Playgroud)
foo.js在哪里
exports.foo = functions.database.ref('/foo').onWrite(event => {
...
});
Run Code Online (Sandbox Code Playgroud)
和bar.js是
exports.bar = functions.database.ref('/bar').onWrite(event => {
...
});
Run Code Online (Sandbox Code Playgroud)
有没有办法在不将所有函数放在index.js中的情况下完成此操作?
我们正在开发一个使用新的firebase云功能的应用程序.目前正在发生的事情是将事务放入队列节点.然后该函数删除该节点并将其放入正确的节点.由于能够脱机工作,因此已实施.
我们目前的问题是功能的速度.该功能本身需要大约400毫秒,所以没关系.但有时功能需要很长时间(大约8秒),而条目已经添加到队列中.
我们怀疑服务器需要时间来启动,因为当我们在第一次执行后再次执行操作时.它花费的时间更少.
有什么方法可以解决这个问题吗?在这里,我添加了我们的功能代码.我们怀疑它没有任何问题,但我们添加它以防万一.
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const database = admin.database();
exports.insertTransaction = functions.database
.ref('/userPlacePromotionTransactionsQueue/{userKey}/{placeKey}/{promotionKey}/{transactionKey}')
.onWrite(event => {
if (event.data.val() == null) return null;
// get keys
const userKey = event.params.userKey;
const placeKey = event.params.placeKey;
const promotionKey = event.params.promotionKey;
const transactionKey = event.params.transactionKey;
// init update object
const data = {};
// get the transaction
const transaction = event.data.val();
// transfer transaction
saveTransaction(data, transaction, userKey, placeKey, promotionKey, transactionKey);
// remove from queue
data[`/userPlacePromotionTransactionsQueue/${userKey}/${placeKey}/${promotionKey}/${transactionKey}`] = null; …
Run Code Online (Sandbox Code Playgroud) node.js firebase firebase-realtime-database google-cloud-functions
使用新的firebase云功能,我决定将我的一些HTTP端点移动到firebase.一切都很好......但我有以下问题.我有两个端点由HTTP触发器(云功能)构建
虽然第一个端点很好,但对于我的第二个端点,我希望仅为经过身份验证的用户保护它.意思是拥有我之前生成的令牌的人.
我该如何解决这个问题?
我知道我们可以使用云函数获取Header参数
request.get('x-myheader')
Run Code Online (Sandbox Code Playgroud)
但有没有办法保护端点就像保护实时数据库一样?
firebase firebase-security firebase-authentication firebase-realtime-database google-cloud-functions
我目前正在学习如何为Firebase使用新的Cloud Functions,而我遇到的问题是我无法访问我通过AJAX请求编写的函数.我收到"No'Access-Control-Allow-Origin'"错误.这是我写的函数的一个例子:
exports.test = functions.https.onRequest((request, response) => {
response.status(500).send({test: 'Testing functions'});
})
Run Code Online (Sandbox Code Playgroud)
该函数位于以下URL:https: //us-central1-fba-shipper-140ae.cloudfunctions.net/test
Firebase文档建议在功能中添加CORS中间件,我已经尝试过但它对我不起作用:https://firebase.google.com/docs/functions/http-events
我就这样做了:
var cors = require('cors');
exports.test = functions.https.onRequest((request, response) => {
cors(request, response, () => {
response.status(500).send({test: 'Testing functions'});
})
})
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我很感激任何帮助.
更新:
道格史蒂文森的回答有所帮助.添加({产地:真})固定的问题,我也不得不改变response.status(500)
,以response.status(200)
我在第一次完全错过.
我正在寻找一种方法来为Firebase安排云功能,或者换句话说,在特定时间触发它们.
在Firebase存储中使用函数for Firebase上传文件后,我想获取该文件的下载URL.
我有这个 :
...
return bucket
.upload(fromFilePath, {destination: toFilePath})
.then((err, file) => {
// Get the download url of file
});
Run Code Online (Sandbox Code Playgroud)
目标文件有很多参数.甚至一个名字mediaLink
.但是,如果我尝试访问此链接,我会收到此错误:
匿名用户没有storage.objects.get访问对象...
有人可以告诉我如何获取公共下载Url?
谢谢
我刚刚为Firebase实现了新的云功能,但是日志中有些东西困扰着我:
结算帐户未配置.外部网络无法访问,配额严重受限.配置结算帐户以删除这些限制
我实际上设法从外部网络访问该功能,所以我想知道我真的必须提供我的结算帐户吗?在firebase文档中没有任何相关内容.
我正在使用Spark订阅计划进行个人测试,如果我还没有支付任何费用,我不想添加计费信息.
我跑的时候
firebase deploy --only functions
它读取index.js
文件并更新从该文件导出的所有函数.如果在之前的部署中有一个名为的函数a
,并且在当前部署中没有这样的函数,a
将被删除.
换句话说,效果与删除所有现有函数,然后index.js
添加当前文件中的所有函数相同.
是否可以添加/更新/删除单个功能?
云功能和Firebase功能(或"Firebase的云功能")看起来都一样.请描述每个用例.
两者都使用HTTP功能.
在云功能中:
exports.helloHttp = function helloHttp (req, res) {
res.send(`Hello ${req.body.name || 'World'}!`);
};
Run Code Online (Sandbox Code Playgroud)
并在Firebase功能中:
exports.helloWorld = functions.https.onRequest((request, response) => {
response.send("Hello from Firebase!");
});
Run Code Online (Sandbox Code Playgroud)
这些有什么区别?
我有一个全新安装的firebase工具(按照本教程),我正在尝试上传我的第一个firebase功能.我在hello-world示例中遇到了这个问题,它们在运行firebase init时初始化(在init期间唯一设置函数CLI功能)
如果我取代$RESOURCE_DIR
在firebase.json
我的文件夹功能,它的工作原理,但当然这是不好的做法,我想找到一个妥善$RESOURCE_DIR
的作品更换.
PS D:\workspace\firebase-functions> firebase deploy
=== Deploying to 'newagent-5221d'...
i deploying functions
Running command: npm --prefix $RESOURCE_DIR run lint
npm ERR! path D:\workspace\firebase-functions\$RESOURCE_DIR\package.json
npm ERR! code ENOENT
npm ERR! errno -4058
npm ERR! syscall open
npm ERR! enoent ENOENT: no such file or directory, open 'D:\workspace\firebase-functions\$RESOURCE_DIR\package.json'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent
npm ERR! A complete log of …
Run Code Online (Sandbox Code Playgroud)