Используя Firebase Hosting, могу ли я настроить все маршруты на один и тот же пункт назначения, имея при этом маршрут api?

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

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

Вопрос:

Это то, что я предполагаю для моих firebase.json перезаписей.

 "rewrites": [
  {
    "source": "/api",
    "function": "api"
  },
  {
    "source": "**",
    "destination": "/index.html"
  }
]
 

Выполняются ли перезаписи по порядку (в данном случае /api сначала проверяется маршрут ** )?

Если нет, могу ли я отправить все маршруты в свою функцию express и просто обработать маршрутизацию к статическим файлам react там?

 "rewrites": [
  {
    "source": "**",
    "function": "express"
  }
]
 
 const functions = require('firebase-functions')
const express = require('express')
const path = require('path');

const app = express()

// Init Middleware
app.use(express.json({ extended: false }));

// Define Routes
app.use('/api/users', require('./routes/users'));
app.use('/api/auth', require('./routes/auth'));
app.use('/api/contacts', require('./routes/contacts'));

// Serve static assets in production
if (process.env.NODE_ENV === 'production') {
  // Set static folder
  app.use(express.static('client/build'));

  app.get('*', (req, res) =>
    res.sendFile(path.resolve(__dirname, 'client', 'build', 'index.html'))
  );
}

exports.express = functions.https.onRequest(app)
 

Ответ №1:

Выполняются ли перезаписи по порядку (в данном случае сначала проверяется маршрут /api перед **)?

ДА. Это явно указано в документации:

Важно: в атрибуте rewrites хостинг применяет перезапись, определенную первым правилом, с шаблоном URL, который соответствует запрошенному пути. Итак, вам нужно намеренно упорядочить правила в атрибуте rewrites .

Это позволяет обслуживать как динамический, так и статический контент.

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

1. спасибо, Даг!! это было действительно ясно. будет ли работать второй вариант?

2. Конечно, вы, конечно, могли бы попробовать, но это будет стоить дороже и может быть менее эффективным.