Firebase:如何调用 https.onCall 函数 node.js?
Posted
技术标签:
【中文标题】Firebase:如何调用 https.onCall 函数 node.js?【英文标题】:Firebase: How to call an https.onCall function node.js? 【发布时间】:2020-03-03 08:56:25 【问题描述】:根据 Firebase 的文档,以下代码可用于调用名为 addMessage 的 onCall 函数。
var addMessage = firebase.functions().httpsCallable('addMessage');
addMessage(text: messageText).then(function(result)
// Read result of the Cloud Function.
var sanitizedMessage = result.data.text;
)
我有一个名为 test 的函数,其 javascript 代码如下(仅用于测试此功能):
exports.test = functions.https.onCall((data, context) =>
console.log(data);
data.page++;
console.log(data);
var testing = firebase.functions().httpsCallable('test');
while(data.page < 5)
testing(page: data.page).then(res =>
console.log("done");
)
);
但是,在运行此程序时,我收到以下错误:
未处理的错误 TypeError: firebase.functions is not a function
我做错了什么?
【问题讨论】:
***.com/questions/55883213/…的可能重复 这里有一个类似的问题供您参考***.com/questions/49480761/… @TravisWebb 这不是重复的。错误可能相同,但您链接的问题是尝试在浏览器中运行节点脚本。此处的 OP 正在尝试从浏览器中调用 Cloud Function,在这种情况下,他们需要包含客户端firebase-functions
SDK。
【参考方案1】:
firebase.functions()
方法来自firebase/functions
包,而不是来自firebase
或firebase-functions
。
const firebase = require('firebase/app');
require('firebase/functions');
const firebaseConfig = <YOUR_CONFIG_HERE>;
const app = firebase.initializeApp(firebaseConfig);
const functions = app.functions();
【讨论】:
我现在正是这样做的,但是在部署时我收到错误 TypeError: app.functions is not a function 所以我的问题最终与 npm 相关。我删除了我的 package-lock.json 和 node_modules 文件夹并重新安装了所有内容。在那之后,你的答案奏效了!非常感谢【参考方案2】:您似乎没有将客户端 Cloud Functions SDK 包含到您的 Web 应用程序中。根据您包含其他 Firebase SDK 的方式,您可能需要执行 what Phani linked to,或将其包含在另一个中(例如 <script src="https://www.gstatic.com/firebasejs/7.2.3/firebase-functions.js"></script>
)。
setting up your client development environment 上的文档中介绍了该过程。
【讨论】:
我已经包含了firebase和firebase-functions如下:const firebase = require("firebase"); const functions = require('firebase-functions');
我也试过firebase.functions().httpsCallable('test');
以及functions.httpsCallable('test');
总是同样的错误。
我还应该提到,这段代码都在我的 index.js 文件中,位于 firebase 项目的 functions 目录中。据我所知,这不是“web-app”或任何东西,它只是 node.js 中项目的功能。
如果你试图从另一个调用一个 firebase 函数,你可能把事情复杂化了。看到这个答案:***.com/a/42787159/3399890
@robsiemb 我有同样的问题。如果你想按照微服务的方式来实现你的系统,一般的想法是将系统划分为服务并公开一个 API。就我而言,我也不希望所有 API 都可以直接被客户端使用,并且必须通过中介服务连接它们。在这种情况下,我需要使用 HTTPS 可调用触发器。那么,这可以通过使用 Nodejs 的 Web SDK 来完成吗?【参考方案3】:
尝试将脚本定义添加到 app.js
scriptInit = (scrName) =>
const script = document.createElement("script");
script.src = scrName;
script.async = false;
script.type="module"
document.body.appendChild(script);
componentWillMount()
this.scriptInit("https://www.gstatic.com/firebasejs/9.1.3/firebase-app.js");
this.scriptInit("https://www.gstatic.com/firebasejs/9.1.3/firebase-functions.js");
对于函数调用,以下工作:
const firebase = require("firebase/app");
const functions = require("firebase/functions");
const firebaseConfig = FIREBASE_CONFIG;
const app = firebase.initializeApp(FIREBASE_CONFIG);
const functionsFB = functions.getFunctions(app);
return (async () =>
let fbSomeFuncName = (functions.httpsCallable(functionsFB, 'somefunction'))
let data = await fbSomeFuncName().then(data=>return (data.data)).catch(err=>console.log("error:"+err))
return data
// don't forget to add data to the response
【讨论】:
以上是关于Firebase:如何调用 https.onCall 函数 node.js?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Firebase Cloud 函数中调用导出的 https Firebase Cloud 函数?
Firebase:如何调用 https.onCall 函数 node.js?