Abbina Cloud Functions a Firebase Hosting per generare e pubblicare i tuoi contenuti dinamici o creare API REST come microservizi.
Cloud Functions for Firebase ti consente di eseguire automaticamente codice di backend in risposta alle richieste HTTPS. Il tuo codice è archiviato nel cloud di Google e viene eseguito in un ambiente gestito. Non è necessario gestire e scalare i tuoi server.
Per esempi di casi d'uso e campioni per Cloud Functions integrato con Firebase Hosting, visita la nostra panoramica serverless.
Connetti Cloud Functions a Firebase Hosting
Questa sezione fornisce un esempio dettagliato per connettere una funzione a Firebase Hosting.
Tieni presente che per migliorare il rendimento della pubblicazione di contenuti dinamici, puoi facoltativamente ottimizzare le impostazioni della cache.
Passaggio 1: configura Cloud Functions
Assicurati di avere l'ultima versione della CLI Firebase e di aver inizializzato Firebase Hosting.
Per istruzioni dettagliate sull'installazione della CLI e sull'inizializzazione di Hosting, consulta la guida Guida introduttiva per Hosting.
Assicurati di aver configurato Cloud Functions:
Se hai già configurato Cloud Functions, puoi procedere al passaggio 2: crea e testa una funzione HTTPS.
Se non hai configurato Cloud Functions:
Inizializza Cloud Functions eseguendo questo comando dalla directory principale del progetto:
firebase init functions
Quando richiesto, seleziona JavaScript (questo esempio di procedura dettagliata utilizza JS).
Verifica di avere una directory
functions
nella directory del progetto locale (creata dal comando Firebase che hai appena eseguito). Questa directoryfunctions
contiene il codice per Cloud Functions.
Passaggio 2: crea e testa una funzione HTTPS per il tuo sito Hosting
Apri
/functions/index.js
nel tuo editor preferito.Sostituisci i contenuti del file con il seguente codice.
Questo codice crea una funzione HTTPS (denominata
bigben
) che risponde alle richieste HTTPS con unBONG
per ogni ora del giorno, proprio come un orologio.const functions = require('firebase-functions/v1'); exports.bigben = functions.https.onRequest((req, res) => { const hours = (new Date().getHours() % 12) + 1 // London is UTC + 1hr; res.status(200).send(`<!doctype html> <head> <title>Time</title> </head> <body> ${'BONG '.repeat(hours)} </body> </html>`); });
Testa le tue funzioni in locale utilizzando Firebase Local Emulator Suite.
Dalla directory principale del progetto locale, esegui questo comando:
firebase emulators:start
Accedi alla funzione tramite l'URL locale restituito dalla CLI, ad esempio:
.http://localhost:5001/PROJECT_ID/us-central1/bigben
Per saperne di più sulle richieste HTTPS, consulta la documentazione di Cloud Functions.
Il passaggio successivo ti illustra come accedere a questa funzione HTTPS da un URL Firebase Hosting in modo che possa generare contenuti dinamici per il tuo sito ospitato su Firebase.
Passaggio 3: indirizza le richieste HTTPS alla tua funzione
Con le
regole di riscrittura, puoi indirizzare le richieste
che corrispondono a pattern specifici a una singola destinazione. I seguenti passaggi mostrano
come indirizzare tutte le richieste dal percorso ../bigben
sul tuo sito Hosting
per eseguire la funzione bigben
.
Apri il file
firebase.json
.Aggiungi la seguente configurazione
rewrite
nella sezionehosting
:"hosting": { // ... // Add the "rewrites" attribute within "hosting" "rewrites": [ { "source": "/bigben", "function": { "functionId": "bigben", "region": "us-central1" // optional (see note below) "pinTag": true // optional (see note below) } } ] }
Verifica che il reindirizzamento funzioni come previsto eseguendo nuovamente il test con gli emulatori Firebase.
Dalla directory principale del progetto locale, esegui questo comando:
firebase emulators:start
Visita l'URL ospitato localmente per il tuo sito restituito dalla CLI (di solito
localhost:5000
), ma aggiungi l'URL conbigben
, in questo modo:http://localhost:5000/bigben
Itera sulla funzione e sulla sua funzionalità per il tuo sito. Utilizza gli emulatori Firebase per testare queste iterazioni.
Per ottenere le migliori prestazioni, colloca le tue funzioni con Hosting scegliendo una delle seguenti regioni:
us-west1
us-central1
us-east1
europe-west1
asia-east1
Visita la pagina di configurazione di Hosting per ulteriori dettagli sulle regole di riscrittura. Puoi anche scoprire di più sull'ordine di priorità delle risposte per varie configurazioni di Hosting.
Tieni presente che per migliorare il rendimento della pubblicazione di contenuti dinamici, puoi facoltativamente ottimizzare le impostazioni della cache.
Passaggio 4: esegui il deployment della funzione
Una volta che la funzione funziona come previsto nell'emulatore, puoi procedere con la distribuzione, il test e l'esecuzione con le risorse del progetto reale. Questo è un buon momento per valutare l'impostazione delle opzioni di runtime per controllare il comportamento di scalabilità per le funzioni in esecuzione in produzione.
Esegui il deployment della funzione, nonché dei contenuti e della configurazione di Hosting, sul tuo sito eseguendo questo comando dalla radice della directory del progetto locale:
firebase deploy --only functions,hosting
Accedi al tuo sito live e alla tua funzione agli URL seguenti:
I tuoi sottodomini Firebase:
PROJECT_ID.web.app/bigben
ePROJECT_ID.firebaseapp.com/bigben
Eventuali domini personalizzati collegati:
CUSTOM_DOMAIN/bigben
Utilizzare un framework web
Puoi utilizzare framework web, come Express.js, in Cloud Functions per pubblicare i contenuti dinamici della tua app e scrivere app web complesse più facilmente.
La sezione seguente fornisce un esempio dettagliato di utilizzo di Express.js con Firebase Hosting e Cloud Functions.
Installa Express.js nel tuo progetto locale eseguendo il comando seguente dalla directory
functions
:npm install express --save
Apri il file
/functions/index.js
, quindi importa e inizializza Express.js:const functions = require('firebase-functions/v1'); const express = require('express'); const app = express();
Aggiungi i due endpoint seguenti:
Aggiungi il primo endpoint per pubblicare l'indice del nostro sito web all'indirizzo
/
.app.get('/', (req, res) => { const date = new Date(); const hours = (date.getHours() % 12) + 1; // London is UTC + 1hr; res.send(` <!doctype html> <head> <title>Time</title> <link rel="stylesheet" href="/style.css"> <script src="/script.js"></script> </head> <body> <p>In London, the clock strikes: <span id="bongs">${'BONG '.repeat(hours)}</span></p> <button onClick="refresh(this)">Refresh</button> </body> </html>`); });
E un altro endpoint per restituire il conteggio di
BONG
come API, in formato JSON, in/api
:app.get('/api', (req, res) => { const date = new Date(); const hours = (date.getHours() % 12) + 1; // London is UTC + 1hr; res.json({bongs: 'BONG '.repeat(hours)}); });
Esporta l'app Express.js come funzione HTTPS:
exports.app = functions.https.onRequest(app);
Nel file
firebase.json
, indirizza tutte le richieste alla funzioneapp
. Questa riscrittura consente a Express.js di pubblicare il diverso percorso secondario che abbiamo configurato (in questo esempio,/
e/api
).{ "hosting": { // ... // Add the "rewrites" attribute within "hosting" "rewrites": [ { "source": "**", "function": "app" } ] } }
Aggiungere middleware
Continuando con il nostro esempio, ora che utilizzi Express.js, puoi aggiungere middleware Express.js nel modo consueto. Ad esempio, puoi attivare le richieste CORS sui nostri endpoint.
Installa il middleware
cors
eseguendo il seguente comando:npm install --save cors
Apri il file
/functions/index.js
, quindi aggiungicors
alla tua app Express.js, come segue:const cors = require('cors')({origin: true}); app.use(cors);
Visita la documentazione di Cloud Functions per scoprire di più sull'utilizzo di Firebase con le app Express e i moduli middleware.
Passaggi successivi
Configura la memorizzazione nella cache per i tuoi contenuti dinamici su una CDN globale.
Interagisci con altri servizi Firebase utilizzando l'SDK Firebase Admin.
Esamina i prezzi e le quote e i limiti per Cloud Functions.