промежуточное программное обеспечение, чтобы переписать 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 в переписывание хостинга.

Ответы на вопрос(0)

Ваш ответ на вопрос