Функции Firebase не могут использовать функции oncall в приложении, возвращает внутреннюю ошибку

#javascript #firebase #firebase-authentication #google-cloud-functions

#javascript #firebase #google-cloud-функции

Вопрос:

Функции Firebase при вызове не работают

Недавно я следил за серией обучающих программ Firebase на канале Net Ninja YouTube.


Список воспроизведения функций Net Ninja 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.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';
});
  

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);
    });
});
  

Я также правильно инициализирую firebase в index.html

 <!-- 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) не работают с 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>
  

Ответ №1:

Я обнаружил, что вызываемые функции из веб-клиентов javascript не работают с версией SDK 7.21.1. Если вы понизите версию до 7.21.0, она должна работать нормально. Последняя версия 7.22.0 по-прежнему кажется сломанной.

Это было отправлено на GitHub, если вы хотите его отследить.

Обновление 5 октября 2020 г.: по-видимому, это было исправлено в 7.22.1.

Комментарии:

1. да, я попробовал, понизил его до 7.21.0, и это просто сработало. Большое спасибо.

2. @Doug Stevenson я собирался совершить ошибку. У меня было приложение Electron, и я переносил его в Интернет с помощью Firebase hosting и просто хотел переместить все мои функции HTTP-триггера в вызываемые… я ломал голову в течение 3 дней .. собирался откатить все изменения в http triggger и увидел это … 🙂

3. Я хочу добавить примечание здесь, если вы столкнулись с этим, вам также может потребоваться обновить firebase-functions пакет на стороне сервера. Это вызывает ту же проблему; устраняется путем обновления до последней версии.