#firebase #google-cloud-functions #firebase-hosting #firebase-cli
# #firebase #google-cloud-функции #firebase-хостинг #firebase-cli
Вопрос:
Я пытаюсь настроить firebase с доменом, чтобы:
- Мои функции доступны на mydomain.com/api/functionName
- Мой хостинг доступен на mydomain.com (или предпочтительно mydomain.com/client /, но другой тоже будет работать)
Мой firebase.json
выглядит так:
{
"hosting": {
"public": "build",
"ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
"rewrites": [
{
"source": "**",
"destination": "/index.html"
},
{
"source": "/api/helloWorld",
"function": "helloWorld"
}
]
}
}
После развертывания этого и доступа к домену в браузере оба /
/api/helloWorld
маршрута и всегда будут перенаправлять меня в мое клиентское приложение, а не в мою функцию.
Что действительно странно для меня, так это то, что при локальном запуске эмулятора хостинг вообще не работает, но localhost:5000/api/helloWorld
работает должным образом и вызывает функцию.
Что я здесь делаю не так? Такое ощущение, что my firebase.json
вообще не развернут.
Обновить
Вот мое определение функции, если это имеет к этому какое-то отношение:
exports.helloWorld = functions
.region("europe-west3")
.https.onRequest((_, response) => {
response.send("Hello from Firebase!");
});
Ответ №1:
Перезапись выполняется в порядке «побед в первом совпадении». Поскольку у вас есть a **
вверху, он будет соответствовать всем URL-адресам, а вторая перезапись никогда не будет доступна. Если вы измените порядок, вы должны увидеть, что он работает должным образом:
{
"hosting": {
// ...
"rewrites": [
{
"source": "/api/helloWorld",
"function": "helloWorld"
},
{
"source": "**",
"destination": "/index.html"
}
]
}
}
Комментарии:
1. Оказывается, вы не можете использовать перезапись хостинга функции с функциями вне
us-central1
. Вот почему это приводит к такому странному поведению. Развертывание моей функцииus-central1
отлично работает с вашим ответом.