URL-адрес облачной функции Firebase не является базовым для запросов от внешнего интерфейса. - PullRequest
0 голосов
/ 24 февраля 2020

Я создаю веб-приложение с ReactJS на внешнем интерфейсе и использую Node и Express с Firestore для извлечения данных из внутреннего интерфейса.

Я использую ax ios для запросов HTTP. Я установил baseurl, используя axios.default.baseURL = "https://us-central1-<project-id>.cloudfunctions.net/api". Это конечная точка для всех моих облачных функций. Эти функции включают get / post, которые получают или обновляют некоторые данные, которые хранятся в Firestore.

Все они экспортируются как одна функция, используя express: exports.api = functions.https.onRequest(app);

Моя база данных. json переписывает следующее:

"hosting": {
    "public": "build",
    "ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
    "rewrites": [
      {
        "source": "**",
        "function": "api"
      }
    ]
  }

Проблема в том, что на моем развернутом сайте какой-то топор ios http вызывает go на правильный baseUrl, который я установил по умолчанию. Другие go на URL моего хоста: <project-id>.firebaseapp.com/getData.

Есть что-то, что я не правильно делаю? Я хочу, чтобы все запросы http go указывали на правильный базовый URL, но я не могу заставить его работать.

1 Ответ

0 голосов
/ 24 февраля 2020

В вашей конфигурации хостинга базовый URL для вызовов вашего API должен быть <project-id>.firebaseapp.com/. Если вы хотите получить доступ к маршруту /getData express вашей облачной функции, вы должны сделать запрос на <project-id>.firebaseapp.com/getData.

. В общем, вы стараетесь избегать прямого вызова домена cloudfunctions.net, но также с осторожностью что размещение вашей облачной функции позади Firebase Hosting также вводит CDN в конвейер. CDN будет кэшировать результаты и вызывать вашу облачную функцию, в то же время удаляя файлы cookie, которые не __session.

. Чтобы предотвратить ненужную передачу всех запросов в вашу облачную функцию, я бы изменил вашу конфигурацию так, чтобы ваша облачная функция была только вызывается по пути /api.

"hosting": {
  "public": "build",
  "ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
  "rewrites": [
    {
      "source": "api/**",
      "function": "api"
    }
  ]
}

, который потребует изменения маршрутов express на /api/getData, et c.

...