Есть ли лучший способ написать «перезаписи» для функций в firebase.json?

#firebase #google-cloud-functions #firebase-hosting

#firebase #google-cloud-функции #firebase-хостинг

Вопрос:

Я новичок в функциях firebase. Я пытаюсь перенаправить функции по новому URL-адресу вместо использования URL-адреса по умолчанию из функций firebase.

Мой firebase.json выглядит так. Есть ли способ улучшить «перезаписи»?

 {
  "functions": {
    "predeploy": [
      "npm --prefix "$RESOURCE_DIR" run lint"
    ],
    "source": "functions"
  },
  "hosting": {
    "cleanUrls": true,
    "public": "public",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],

    "rewrites": [
       {
        "source": "/.well-known/acme-challenge/wVJAlodX0whlzQQxznOSngFXGWFOLtsjk2F9l7oQDXc",
        "destination": "/firebaseHostingVerification"   
        },
      {
        "source": "api/v1/currencies", 
        "function": "currencies"
      },
        {
        "source": "api/v1/stop", 
        "function": "stop"
      },
        {
        "source": "api/v1/track", 
        "function": "track"
      },
        {
        "source": "api/v1/bookmark", 
        "function": "bookmark"
      },
        {
        "source": "api/v1/authenticate", 
        "function": "authenticate"
      },
        {
        "source": "api/v1/add-token", 
        "function": "addUserToken"
      },
        {
        "source": "api/v1/update-history", 
        "function": "updateHistory"
      },
        {
        "source": "api/v1/update-rates", 
        "function": "updateLatestRatesWithCodes"
      },
        {
        "source": "api/v1/createMoneyChanger", 
        "function": "createMoneyChanger"
      },
        {
        "source": "api/v1/moneyChanger", 
        "function": "moneyChanger"
      },
        {
        "source": "api/v1/updateRates", 
        "function": "updateRates"
      }
        //
        {
        "source": "**",
        "destination": "/index.html"
      }
    ]
  },
  "database": {
    "rules": "database.rules.json"
  },
  "firestore": {
    "rules": "firestore.rules",
    "indexes": "firestore.indexes.json"
  },
  "storage": {
    "rules": "storage.rules"
  }
}

  

Могу ли я написать это таким образом, чтобы всякий раз, когда я добавляю новые функции, они всегда будут находиться под моим предопределенным URL / именем функции?

Ответ №1:

Если вы спрашиваете, возможно ли отказаться от необходимости повторно вводить «api / vi /», это не вариант. Правила перезаписи ограничены в этом отношении. Вам необходимо вызывать путь в URL-адресе для каждой перезаписи.

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

Комментарии:

1. Спасибо @Doug Strevenson. Есть ли лучший способ вызывать функции из веб-приложения? Если я не перенаправлю, веб-приложение не сможет вызывать функции, если я не разрешу CORS для всех функций.

2. Вам не нужно писать HTTP-триггеры. Вместо этого вы могли бы написать триггеры базы данных и вызвать их путем записи в базу данных.

3. Как записать триггеры базы данных? Я хотел иметь API, чтобы всеми платформами, использующими шрифты: iOS, Android и т. Д., Можно было управлять из одного места.

4. ОК. Я нашел это. firebase.google.com/docs/functions/database-events возможно ли иметь событие OnRead()?

5. Нет, это вообще не будет масштабироваться.