Перенаправить корень хостинга Firebase в облачную функцию не работает

Я использую хостинг Firebase с файлом firebase.json, который должен перенаправлять весь трафик в облачную функцию (предварительная визуализация), которая заполняет мета-теги и теги og для SEO.

{
  "hosting": {
      "public": "dist/prod",
      "rewrites": [
       {
          "source": "**",
          "function": "prerender"
       }
      ]
   }
}

Моя prerender функция - это обработка запроса и рендеринг HTML-файла. Это отлично работает:

export const prerender = functions.https.onRequest((req, res) => {
   console.log('prerender function: "' + req.path + '"');
   ...
}

При достижении конечной точки в https://xxx.cloudfunctions.net/prerender я правильно получаю вызов на панели управления Firebase в разделе Функции -> Журналы:

prerender function: "null"

Однако при вызове https://mypage.firebaseapp.com я не получаю журналов, и кажется, что index.html внутри моей папки dist/prod.

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


person Andy Abgottspon    schedule 02.07.2017    source источник
comment
Подробное решение с NestJS на сервере находится здесь: stackoverflow.com/a/57493514/11127383   -  person Daniel Danielecki    schedule 14.08.2019


Ответы (1)


Вы должны иметь возможность направлять все URL-адреса в функцию точно так, как вы показываете. Я предполагаю, что у вас все еще есть файл index.html, расположенный в вашем каталоге dist / prod. В моем тестовом проекте я просто переименовал корневой index.html во что-то другое, и запросы к / были перенаправлены на мою функцию.

Оказывается, что если есть статический веб-контент, соответствующий URL-адресу клиентского запроса, он будет обслуживаться, а не делегироваться функции. Это верно для любого входящего URL-адреса. Единственный способ действительно гарантировать, что все запросы направляются к вашей функции, - это удалить все содержимое из вашей dist/prod папки перед развертыванием.

Я считаю, что основная информация содержится в документации по переписыванию :

Правило перезаписи применяется только в том случае, если файл или папка не существует в указанном источнике, и возвращает фактическое содержимое файла в месте назначения вместо перенаправления HTTP.

person Doug Stevenson    schedule 02.07.2017