Sincroniza Cloud Functions con Firebase Hosting para generar y entregar tu contenido dinámico o compilar las APIs de REST como microservicios.
Cloud Functions for Firebase te permite ejecutar automáticamente el código de backend en respuesta a las solicitudes HTTPS. Tu código se almacena en la nube de Google y se ejecuta en un entorno administrado. No necesitas administrar ni escalar tus propios servidores.
Por ejemplo, casos de uso y muestras de Cloud Functions integrados en Firebase Hosting, visita nuestro descripción general de la tecnología sin servidores.
Conectar Cloud Functions a Firebase Hosting
En esta sección, se proporciona un ejemplo detallado para conectar una función a Firebase Hosting
Recuerda que si quieres mejorar el rendimiento de la entrega de contenido dinámico, puedes configurar la caché.
Paso 1: Configura Cloud Functions
Asegúrate de tener la versión más reciente de la CLI de Firebase y de que inicializaste Firebase Hosting.
Para obtener instrucciones detalladas sobre cómo instalar la CLI y cómo inicializar el entorno Hosting, consulta la Guía de introducción de Hosting
Asegúrate de haber configurado Cloud Functions:
Si ya configuraste Cloud Functions, puedes continuar Paso 2: Crea y prueba una función de HTTPS.
Si no has configurado Cloud Functions, haz lo siguiente:
Inicializa Cloud Functions; para ello, ejecuta el siguiente comando desde la raíz del directorio de tu proyecto:
firebase init functions
Cuando se te solicite, selecciona JavaScript (en este ejemplo detallado, se utiliza JS).
Verifica que tengas un directorio
functions
en el directorio del proyecto local (creado por el comando de Firebase que acabas de ejecutar). Esta El directoriofunctions
es donde reside el código para Cloud Functions.
Paso 2: Crea y prueba una función de HTTPS para tu sitio Hosting
Abre
/functions/index.js
en tu editor favorito.Reemplaza el contenido del archivo por el siguiente código.
Este código crea una función de HTTPS (denominada
bigben
) que responde a las solicitudes HTTPS con unBONG
para cada hora del día, como un reloj.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>`); });
Prueba tus funciones localmente con el Firebase Local Emulator Suite
Desde la raíz del directorio del proyecto local, ejecuta el siguiente comando:
firebase emulators:start
Accede a la función a través de la URL local que muestra la CLI, por ejemplo:
.http://localhost:5001/PROJECT_ID/us-central1/bigben
Consulta la documentación de Cloud Functions. para obtener más información sobre las solicitudes HTTPS.
En el siguiente paso, se te indicará cómo acceder a esta función de HTTPS desde una URL de Firebase Hosting para que pueda generar contenido dinámico para el sitio alojado en Firebase.
Paso 3: Dirige solicitudes HTTPS a la función
Con las reglas de reescritura, puedes dirigir solicitudes que coincidan con patrones específicos a un mismo destino. En los siguientes pasos, se muestra
cómo dirigir todas las solicitudes de la ruta de acceso ../bigben
en tu Hosting
sitio para ejecutar la función bigben
.
Abre el archivo
firebase.json
.Agrega la siguiente configuración de
rewrite
en la secciónhosting
:"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) } } ] }
Vuelve a probar con los emuladores de Firebase para confirmar que el redireccionamiento funciona como se espera.
Desde la raíz del directorio del proyecto local, ejecuta el siguiente comando:
firebase emulators:start
Visita la URL alojada de forma local de tu sitio como lo muestra la CLI (generalmente
localhost:5000
), pero agrega la URL conbigben
, de esta manera:http://localhost:5000/bigben
Realiza iteraciones en tu función y su funcionalidad para tu sitio. Usa los emuladores de Firebase para probar estas iteraciones.
Para obtener el mejor rendimiento, coloca tus funciones con Hosting elige una de las siguientes regiones:
us-west1
us-central1
us-east1
europe-west1
asia-east1
Visita la página de configuración de Hosting para obtener más detalles sobre las reglas de reescritura. Puedes aprenderás sobre la orden de prioridad de las respuestas para varias configuraciones de Hosting.
Recuerda que si quieres mejorar el rendimiento de la entrega de contenido dinámico, puedes configurar la caché.
Paso 4: Implementa tu función
Una vez que tu función se ejecute como deseas en el emulador, puedes continuar con la implementación, la prueba y la ejecución con recursos reales del proyecto. Este es un buen momento para considerar la posibilidad de configurar opciones del entorno de ejecución para controlar el comportamiento de escalamiento en las funciones que se ejecutan en producción.
Implementa tu función, así como el contenido y la configuración de Hosting en tu sitio; para ello, ejecuta el siguiente comando desde la raíz del directorio del proyecto local:
firebase deploy --only functions,hosting
Accede al sitio publicado y la función en las siguientes URLs:
Tus subdominios de Firebase:
PROJECT_ID.web.app/bigben
yPROJECT_ID.firebaseapp.com/bigben
Cualquier dominio personalizado conectado:
CUSTOM_DOMAIN/bigben
Usa un framework web
Puedes usar frameworks web, como Express.js, en Cloud Functions para entregar el contenido dinámico de tu app y escribir aplicaciones web complejas con mayor facilidad.
En la siguiente sección, se proporciona un ejemplo detallado para usar Express.js con Firebase Hosting y Cloud Functions.
Para instalar Express.js en el proyecto local, ejecuta el siguiente comando desde el directorio
functions
:npm install express --save
Abre el archivo
/functions/index.js
y, a continuación, importa e inicializa Express.js:const functions = require('firebase-functions/v1'); const express = require('express'); const app = express();
Agrega los dos extremos que siguen a continuación:
Agrega a
/
el primer extremo para entregar el índice del sitio web.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>`); });
Y agrega otro extremo para mostrar el recuento de
BONG
como API, en formato JSON, en/api
, de la siguiente manera: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)}); });
Exporta la app para Express.js como una función de HTTPS, como se indica a continuación:
exports.app = functions.https.onRequest(app);
En el archivo
firebase.json
, dirige todas las solicitudes a la funciónapp
. Esta operación de reescritura permite que Express.js entregue la ruta secundaria que configuramos (en este ejemplo,/
y/api
).{ "hosting": { // ... // Add the "rewrites" attribute within "hosting" "rewrites": [ { "source": "**", "function": "app" } ] } }
Agrega middleware
Para continuar con nuestro ejemplo, ahora que utilizas Express.js, puedes agregar Express.js middleware de la manera típica. Por ejemplo, puedes habilitar las solicitudes CORS en nuestros extremos.
Instala el middleware
cors
; para ello, ejecuta el siguiente comando:npm install --save cors
Abre el archivo
/functions/index.js
y, luego, agregacors
a la app de Express.js, de la siguiente manera:const cors = require('cors')({origin: true}); app.use(cors);
Consulta la documentación de Cloud Functions. para obtener más información sobre cómo usar Firebase con las apps para Express y los módulos de middleware.
Próximos pasos
Configura el almacenamiento en caché para el contenido dinámico en una CDN global.
Usa el SDK de Firebase Admin para interactuar con otros servicios de Firebase.
Revisa los precios y las cuotas y límites de Cloud Functions.