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

ARI*_*PAL 6 javascript firebase google-cloud-functions

Firebase 函数 onCall 不起作用

我最近在关注The Net Ninja YouTube 频道的 Firebase 教程系列。

Net Ninja Firebase 函数播放列表

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

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

包.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
}
Run Code Online (Sandbox Code Playgroud)

早些时候是 "node": "10"

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

index.js firebase 函数文件

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';
});
Run Code Online (Sandbox Code Playgroud)

randomNumber运行完美,但sayHello的永不运行或什么的。我正在从前端调用sayHello函数

app.js我的网络应用程序的 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);
    });
});
Run Code Online (Sandbox Code Playgroud)

我也在 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>
Run Code Online (Sandbox Code Playgroud)

在我的 Web 应用程序的控制台中,记录了一些内容

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)
Run Code Online (Sandbox Code Playgroud) 谁能至少告诉这个控制台日志是什么意思???

请帮助,无法完成教程系列之后我将继续进行一些实际项目,现在已经被困在这里一周了。提前致谢,如果能解决我的问题。



找到解决方案


只需将您在前端使用的 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>
Run Code Online (Sandbox Code Playgroud)

Dou*_*son 10

我发现来自 javascript web 客户端的可调用函数在 SDK 版本 7.21.1 中被破坏了。如果您降级到 7.21.0,它应该可以正常工作。最新的 7.22.0 似乎仍然损坏。

如果您想跟踪它,这已在 GitHub 上归档

2020 年 10 月 5 日更新:显然这已在 7.22.1 中修复。