TypeError: _functions.default.config не является функцией - PullRequest
0 голосов
/ 26 мая 2020

Я развернул некоторые переменные среды с помощью облачных функций Firebase, следуя этому руководству .

Я использую React Native Firebase и хочу получить доступ к переменным среды. В документах Firebase говорится, что вы можете получить доступ к переменным следующим образом:

const functions = require('firebase-functions');
const request = require('request-promise');

exports.userCreated = functions.database.ref('/users/{id}').onWrite(event => {
  let email = event.data.child('email').val();

  return request({
    url: 'https://someservice.com/api/some/call',
    headers: {
      'X-Client-ID': functions.config().someservice.id,
      'Authorization': `Bearer ${functions.config().someservice.key}`
    },
    body: {email: email}
  });
});

В React Native Firebase docs говорится, что импортировать и использовать такие функции Firebase:

import functions from '@react-native-firebase/functions';

function App() {
  const [loading, setLoading] = useState(true);
  const [products, setProducts] = useState([]);

  useEffect(() => {
    functions()
      .httpsCallable('listProducts')()
      .then(response => {
        setProducts(response.data);
        setLoading(false);
      });
  }, []);

Обратите внимание на разницу в импорте.

Мой код выглядит следующим образом:

import functions from '@react-native-firebase/functions';

const id = functions.config().xyz.id;
const key = functions.config().xyz.key;

Я получаю сообщение об ошибке:

TypeError: _functions.default.config is not a function

Кажется, все пакеты установлены правильно - мои версии следующие:

    "@react-native-firebase/app": "^6.3.0",
    "@react-native-firebase/auth": "^6.3.0",
    "@react-native-firebase/crashlytics": "^6.3.0",
    "@react-native-firebase/firestore": "^6.3.0",
    "@react-native-firebase/functions": "^7.1.0",
    "@react-native-firebase/messaging": "^6.3.0",

Где я ошибаюсь и как можно объединить облачные функции Firebase с React Native Firebase, чтобы получить развернутые переменные среды?

Обновление

Я обновил все пакеты RNFB до версии 7.1.0, но у меня все еще есть та же проблема.

1 Ответ

2 голосов
/ 26 мая 2020

Как объясняется в do c, модуль @react-native-firebase/functions «предоставляет функциональные возможности для прямого запуска развернутых HTTPS-функций, вызываемых ».

Другими словами, этот модуль используется для вызова из вашего внешнего интерфейса некоторых облачных функций, которые выполняются на сервере , в Firebase / Инфраструктура Google Cloud.

С другой стороны, получить некоторые переменные среды Cloud Function можно только в Cloud Function, в серверной части .

Итак, вы не может использовать functions.config() в вашем коде React, который выполняется во внешнем интерфейсе. Вы можете сделать это только в коде облачной функции, выполняемом в серверной части.


В вызываемой облачной функции вы могли бы возвращать (вызывающий или потребитель) внешний интерфейс переменных среды, извлеченных в облачной функции.

Что-то вроде следующих строк:

Вызываемая облачная функция

exports.getEnvVariable = functions.https.onCall((data, context) => {
  const serviceId = functions.config().someservice.id;

  return { serviceId };
});

React Front-end

import functions from '@react-native-firebase/functions';

function App() {
  const [loading, setLoading] = useState(true);
  const [products, setProducts] = useState([]);

  useEffect(() => {
    functions()
      .httpsCallable('getEnvVariable')()
      .then(response => {
         const serviceId = response.data.serviceId;
      });
  }, []);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...