Połącz Cloud Functions z Firebase Hosting, aby generować i udostępniać treści dynamiczne lub tworzyć interfejsy API REST jako mikrousługi.
Cloud Functions for Firebase umożliwia automatyczne uruchamianie kodu backendu w odpowiedzi na żądania HTTPS. Twój kod jest przechowywany w chmurze Google i działa w zarządzanym środowisku. Nie musisz zarządzać własnymi serwerami ani ich skalować.
Przykładowe przypadki użycia i przykłady Cloud Functions zintegrowanych z Firebase Hosting, znajdziesz w omówieniu technologii bezserwerowej.
Łączenie Cloud Functions z Firebase Hosting
W tej sekcji znajdziesz przykład łączenia funkcji z Firebase Hosting.
Aby zwiększyć wydajność wyświetlania treści dynamicznych, możesz opcjonalnie dostosować ustawienia pamięci podręcznej.
Krok 1: Skonfiguruj Cloud Functions
Upewnij się, że masz najnowszą wersję Firebase CLI i że masz zainicjowaną usługę Firebase Hosting.
Szczegółowe instrukcje instalowania interfejsu CLI i inicjowania Hosting znajdziesz w przewodniku dla początkujących dotyczącym Hosting.
Upewnij się, że masz skonfigurowaną usługę Cloud Functions:
Jeśli masz już skonfigurowaną usługę Cloud Functions, możesz przejść do kroku 2. Tworzenie i testowanie funkcji HTTPS.
Jeśli nie masz skonfigurowanej usługi Cloud Functions:
Zainicjuj Cloud Functions, uruchamiając to polecenie w katalogu głównym projektu:
firebase init functions
Gdy pojawi się prośba, wybierz JavaScript (w tym przykładzie używamy JS).
Sprawdź, czy w katalogu projektu lokalnego znajduje się katalog
functions(utworzony przez właśnie uruchomione polecenie Firebase). W tymfunctionskatalogu znajduje się kod dla Cloud Functions.
Krok 2. Utwórz i przetestuj funkcję HTTPS dla witryny Hosting
Otwórz plik
/functions/index.jsw ulubionym edytorze.Zastąp zawartość pliku tym kodem.
Ten kod tworzy funkcję HTTPS (o nazwie
bigben), która odpowiada na żądania HTTPS, wysyłając sygnałBONGo każdej godzinie, tak jak zegar.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>`); });Testuj funkcje lokalnie za pomocą Firebase Local Emulator Suite.
W katalogu głównym projektu lokalnego uruchom to polecenie:
firebase emulators:start
Uzyskaj dostęp do funkcji za pomocą lokalnego adresu URL zwróconego przez interfejs CLI, np. przykład:
.http://localhost:5001/PROJECT_ID/us-central1/bigben
Więcej informacji o żądaniach HTTPS znajdziesz w dokumentacji Cloud Functions.
W następnym kroku dowiesz się, jak uzyskać dostęp do tej funkcji HTTPS z adresu Firebase Hosting URL, aby mogła ona generować treści dynamiczne dla witryny hostowanej w Firebase.
Krok 3. Kieruj żądania HTTPS do funkcji
Za pomocą
reguł przekierowania możesz kierować żądania
pasujące do określonych wzorców do jednego miejsca docelowego. Z tych instrukcji dowiesz się, jak kierować wszystkie żądania ze ścieżki ../bigben w witrynie Hosting
do wykonania funkcji bigben.
Otwórz plik
firebase.json.Dodaj tę konfigurację
rewritew sekcjihosting:"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) } } ] }Sprawdź, czy przekierowanie działa zgodnie z oczekiwaniami, ponownie testując za pomocą emulatorów Firebase.
W katalogu głównym projektu lokalnego uruchom to polecenie:
firebase emulators:start
Otwórz lokalnie hostowany adres URL witryny zwrócony przez interfejs CLI (zwykle
localhost:5000), ale dodaj do niegobigben, np.:http://localhost:5000/bigben
Iteracyjnie rozwijaj funkcję i jej działanie w witrynie. Do testowania tych iteracji używaj emulatorów Firebase.
Aby uzyskać najlepszą wydajność, umieść funkcje w tej samej lokalizacji co Hosting przez wybranie jednego z tych regionów:
us-west1us-central1us-east1europe-west1asia-east1
Więcej informacji o regułach przekierowania znajdziesz na stronie konfiguracji Hosting dla więcej szczegółów. Możesz też dowiedzieć się więcej o kolejności priorytetów odpowiedzi w przypadku różnych Hosting konfiguracji.
Aby zwiększyć wydajność wyświetlania treści dynamicznych, możesz opcjonalnie dostosować ustawienia pamięci podręcznej.
Krok 4. Wdróż funkcję
Gdy funkcja będzie działać w emulatorze zgodnie z oczekiwaniami, możesz ją wdrożyć, przetestować i uruchomić za pomocą rzeczywistych zasobów projektu. Warto wtedy rozważyć ustawienie opcji środowiska wykonawczego, aby kontrolować skalowanie funkcji działających w środowisku produkcyjnym.
Wdróż funkcję oraz treści i konfigurację Hosting w witrynie, uruchamiając to polecenie w katalogu głównym lokalnego projektu:
firebase deploy --only functions,hosting
Uzyskaj dostęp do witryny i funkcji na tych adresach URL:
Subdomeny Firebase:
PROJECT_ID.web.app/bigbeniPROJECT_ID.firebaseapp.com/bigbenWszystkie połączone domeny niestandardowe:
CUSTOM_DOMAIN/bigben
Korzystanie z platformy internetowej
W Cloud Functions możesz używać platform internetowych, takich jak Express.js, abyCloud Functions wyświetlać treści dynamiczne aplikacji i łatwiej tworzyć złożone aplikacje internetowe.
W tej sekcji znajdziesz przykład korzystania z Express.js z Firebase Hosting i Cloud Functions.
Zainstaluj Express.js w swoim projekcie lokalnym, uruchamiając to polecenie w katalogu
functions:npm install express --save
Otwórz plik
/functions/index.js, a następnie zaimportuj i zainicjuj Express.js:const functions = require('firebase-functions/v1'); const express = require('express'); const app = express();
Dodaj te 2 punkty końcowe:
Dodaj pierwszy punkt końcowy, aby wyświetlać indeks witryny pod adresem
/.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>`); });Dodaj też punkt końcowy, który będzie zwracać liczbę sygnałów
BONGjako interfejs API w formacie JSON pod adresem/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)}); });
Wyeksportuj aplikację Express.js jako funkcję HTTPS:
exports.app = functions.https.onRequest(app);
W pliku
firebase.jsonskieruj wszystkie żądania do funkcjiapp. To przekierowanie umożliwia Express.js wyświetlanie różnych ścieżek podrzędnych, które skonfigurowaliśmy (w tym przykładzie/i/api).{ "hosting": { // ... // Add the "rewrites" attribute within "hosting" "rewrites": [ { "source": "**", "function": "app" } ] } }
Dodawanie elementu pośredniczącego
W tym przykładzie, gdy używasz już Express.js, możesz dodać element pośredniczący Express.js w typowy sposób. Możesz na przykład włączyć CORS żądania w naszych punktach końcowych.
Zainstaluj element pośredniczący
cors, uruchamiając to polecenie:npm install --save cors
Otwórz plik
/functions/index.js, a następnie dodajcorsdo aplikacji Express.js w ten sposób:const cors = require('cors')({origin: true}); app.use(cors);
Więcej informacji o korzystaniu z Firebase z aplikacjami Express i modułami pośredniczącymi znajdziesz w dokumentacji Cloud Functions.
Dalsze kroki
Skonfiguruj buforowanie treści dynamicznych w globalnej sieci CDN.
Korzystaj z innych usług Firebase za pomocą pakietu Firebase Admin SDK.
Sprawdź ceny oraz limity i ograniczenia dotyczące Cloud Functions.