Firebase函数无法在应用程序中使用oncall函数,返回内部错误



Firebase函数onCall不工作

我最近在关注网络忍者YouTube频道的Firebase系列教程。

网络忍者Firebase功能播放列表

Firebase函数教程#5-可调用函数

我陷入了firebase功能部分,首先我甚至无法部署它们,因为我的帐户中启用了计费,然后我将package.json中的节点版本设置为'8',当我部署这些功能时,它没有要求计费。

package.json

{
"name": "functions",
"description": "Cloud Functions for Firebase",
"scripts": {
"lint": "eslint .",
"serve": "firebase emulators:start --only functions",
"shell": "firebase functions:shell",
"start": "npm run shell",
"deploy": "firebase deploy --only functions",
"logs": "firebase functions:log"
},
"engines": {
"node": "8"
},
"main": "index.js",
"dependencies": {
"firebase-admin": "^8.10.0",
"firebase-functions": "^3.6.1"
},
"devDependencies": {
"eslint": "^5.12.0",
"eslint-plugin-promise": "^4.0.1",
"firebase-functions-test": "^0.2.0"
},
"private": true
}

早些时候"node": "10"

之后,我可以部署这些函数,甚至可以运行onRequest函数,但不能运行onCall功能。每当我试图调用onCall函数时,我都不知道会发生什么,也许我会遇到一个我不确定的错误。

index.jsfirebase函数文件

const functions = require('firebase-functions');
exports.randomNumber = functions.https.onRequest((request, response) => {
const number = Math.round(Math.random() * 100);
console.log(number);
response.send(number.toString());
});
exports.sayHello = functions.https.onCall((data, context) => {
console.log('its running');
return 'hello, ninjas';
});

randomNumber运行良好,但sayHello从未运行过。我从前端调用sayHello函数

app.js我的web应用程序的javascript文件

//sayHello function call
const button = document.querySelector('.call');
button.addEventListener('click', () => {
//get firebase function reference
const sayHello = firebase.functions().httpsCallable('sayHello');
sayHello().then(result => {
console.log(result.data);
}).catch(error => {
console.log(error);
});
});

我还在index.html 中正确初始化firebase

<!-- The core Firebase JS SDK is always required and must be listed first -->
<script src="/__/firebase/7.21.1/firebase-app.js"></script>
<!-- include only the Firebase features as you need -->
<script src="/__/firebase/7.21.1/firebase-auth.js"></script>
<script src="/__/firebase/7.21.1/firebase-firestore.js"></script>
<script src="/__/firebase/7.21.1/firebase-functions.js"></script>
<!-- Initialize Firebase -->
<script src="/__/firebase/init.js"></script>

在我的网络应用程序控制台中,有东西被记录

Error: internal
at new y (error.ts:66)
at w (error.ts:175)
at A.<anonymous> (service.ts:245)
at tslib.es6.js:100
at Object.next (tslib.es6.js:81)
at r (tslib.es6.js:71)
至少有人能说出这个控制台日志的意思吗???

请帮忙,我无法完成教程系列,之后我将继续进行一些真正的项目,我已经在这里呆了一周了。如果能解决我的问题,提前谢谢。



找到解决方案


只需将您在前端使用的javascript sdk版本降级到7.21.0,就可以了。

@DougStevenson在下面指出,Firebase可调用函数在当前时间(2020年10月(无法使用javascript sdk 7.21.1和7.22.0。

升级到firebase 7.22.0 后,无法再调用HttpsCallable函数

<!-- The core Firebase JS SDK is always required and must be listed first -->
<script src="/__/firebase/7.21.0/firebase-app.js"></script>
<!-- include only the Firebase features as you need -->
<script src="/__/firebase/7.21.0/firebase-auth.js"></script>
<script src="/__/firebase/7.21.0/firebase-firestore.js"></script>
<script src="/__/firebase/7.21.0/firebase-functions.js"></script>
<!-- Initialize Firebase -->
<script src="/__/firebase/init.js"></script>

我发现JavaScriptWeb客户端的可调用函数在SDK版本7.21.1中被破坏。如果你降级到7.21.0,它应该还可以。最新的7.22.0似乎已经坏了。

如果你想跟踪它,这已经在GitHub上提交了。

更新时间:2020年10月5日:显然,此问题已在7.22.1中修复。

最新更新