промежуточное программное обеспечение, чтобы переписать URL-адрес запроса.
я есть приложение на основе express.js для облачных функций на firebase в функции с именемapi
, Чтобы использовать собственный домен, я пытаюсь переписать Firebase Hosting, чтобы направить конкретный URL-адрес функции. Я следую официальной документации об облачных функциях и хостинге Firebase здесь,https://firebase.google.com/docs/hosting/functionsи перепробовал много комбинаций, включая следующие:
"rewrites": [
{
"source": "/api/**",
"function": "api"
}
]
"rewrites": [
{
"source": "/api/:path1/:dat1/dat",
"function": "api/:path1/:dat1/dat"
}
]
"rewrites": [
{
"source": "/api/path1/dat1/dat",
"function": "api"
}
]
"rewrites": [
{
"source": "/api/*/*/*",
"function": "api"
}
]
К сожалению, это не работает для любой возможной комбинации. Мое экспресс-приложение имеет следующие пути GET, которые я планирую использовать:
'/api/users/:userId/:userData'
'/api/users/:userId/:userData/json'
'/api/users/:userId/'
и другие похожие на них. : userId и: userData - это параметры в моем запросе, так как он работает с express.js
Требуемые функции работают как положено в
https://my-firebase-app.cloudfunctions.net
но они не работают с
https://my-app.firebaseapp.com
Пожалуйста, скажите мне, как они должны работать и что я делаю неправильно.
РЕДАКТИРОВАТЬ: Вот пример того, как выглядит мой экспорт облачных функций
const functions = require('firebase-functions');
const express = require('express');
const app = express();
app.get('/users/:userId/:userData/json', (req, res) => {
// Do App stuff here
}
// A couple more app.get in the same format
exports.api = functions.https.onRequest(app);
РЕДАКТИРОВАТЬ 2: После предложения @ DougStevenson, я попробовал следующую конфигурацию
Я попробовал следующее в моем firebase.json,
{
"hosting": {
"rewrites": [
{
"source": "/api",
"function": "api"
}
],
"public": "public"
}
}
Но у меня та же проблема, функция никогда не вызывается. Я читал о том, как перезаписываются варианты последней инстанции, и если на хостинге присутствуют файлы, он не перейдет к указанной функции. (Я пытался найти пост SO, где упоминался этот ws, но не могу его найти). Я удалил файлы 404.html и index.html из общедоступного каталога хостинга, так как они мне все равно не нужны. Но проблема все еще осталась.
РЕДАКТИРОВАТЬ 2: Хорошо, поэтому после большого количества проб и ошибок мне просто пришлось жестко кодировать пути в следующем формате:
rewrites : [
{
"source": "/users/**/**/json",
"function": "api"
},
{
"source": "/api/users/**/**/json",
"function": "api"
}
]
После этого экспресс-приложение настраивается примерно так:
app.get('/users/:userId/:userData/json', Foo)
Я все еще предпочел бы, если бы кто-то мог предложить лучший способ сделать это, вместо того, чтобы вручную вводить каждый требуемый Uri в переписывание хостинга.