Я установил хостинг на Firebase и настроил свое экспресс-приложение Node.js в соответствии с документацией, предоставленной Google. Включая правильную структуру папок и инструкции командной строки для запуска функций firebase и firebase.

Структура папки:

Project
-- functions
   -- node_modules
   -- index.js
   -- package.json
-- public
   -- index.html
   -- 404.html
.firebaserc
firebase.json

Я добавил экспресс-приложение в http-запрос функций firebase с помощью приведенного ниже кода:

// Set up endpoint
app.get('/api', (req, res) => {
    res.json({
        message: 'Welcome to the Line Prophet API.  Good luck.'
    })
});

/**
 * Firebase cloud functions 
 */
exports.app = functions.https.onRequest(app);

Мой файл Firebase.json настроен так, чтобы направлять все запросы в место назначения приложения:

{
  "hosting": {
    "public": "public",
    "rewrites": [
      {
        "source": "**",
        "destination": "app"
      }
    ]
  }
}

Как только я запускаю firebase deploy из родительского каталога, все идет хорошо, и в нем говорится, что приложение развернуто: введите описание изображения здесь

Однако после этого я перехожу к https://line-prophet.web.app/api , и я получаю сообщение об ошибке 404 страница не найдена.
введите описание изображения здесь

Я пытался запустить это локально с помощью firebase serve , и у меня такая же проблема. Это работало недолго, поэтому я чувствую, что все настроено правильно, однако после повторного развертывания оно сломалось навсегда. Любые советы приветствуются. Спасибо!

Последние развертывания говорят, что в Firebase развернуто всего 4 файла, что кажется очень низким. Я проверил вкладку «Функции» и вижу, что там есть "приложение" и правильный исходный код.

0
Waggoner_Keith 14 Апр 2020 в 22:43

1 ответ

Лучший ответ

Благодаря @LawrenceCherone, изменившему файл firebase.json на:

"rewrites": [
      {
        "source": "**",
        "function": "app"
      }
    ]

Решил мою проблему. Я использовал пункт назначения вместо функции из-за онлайн-документации, но имеет смысл направлять все запросы в функцию, которую вы настроили для обработки HTTP-запроса.

1
Waggoner_Keith 14 Апр 2020 в 21:02