Możesz wyzwolić funkcję za pomocą żądania HTTP, używając functions.https
. Dzięki temu można wywołać funkcję synchroniczną za pomocą następujących obsługiwanych metod HTTP: GET
, POST
, PUT
, DELETE
i OPTIONS
.
Przykłady na tej stronie są oparte na przykładowej funkcji , która jest wyzwalana podczas wysyłania żądania HTTP GET
do punktu końcowego funkcji. Przykładowa funkcja pobiera bieżący czas serwera, formatuje czas zgodnie z parametrem zapytania adresu URL i wysyła wynik w odpowiedzi HTTP.
Wyzwól funkcję za pomocą żądania HTTP
Użyj functions.https
, aby utworzyć funkcję obsługującą zdarzenia HTTP. Procedura obsługi zdarzeń dla funkcji HTTP nasłuchuje zdarzenia onRequest()
, które obsługuje routery i aplikacje zarządzane przez platformę internetową Express .
Używanie ekspresowych obiektów żądania i odpowiedzi
Używany jako argument w onRequest()
, obiekt Request daje dostęp do właściwości żądania HTTP wysłanego przez klienta, a obiekt Response daje możliwość wysłania odpowiedzi z powrotem do klienta.
exports.date = functions.https.onRequest((req, res) => { // ... });
Korzystanie z istniejących aplikacji Express
Używając App jako argumentu dla onRequest()
, możesz przekazać pełną aplikację Express do funkcji HTTP. Kod standardowy można przenieść do oprogramowania pośredniego, jak pokazano:
const express = require('express');
const cors = require('cors');
const app = express();
// Automatically allow cross-origin requests
app.use(cors({ origin: true }));
// Add middleware to authenticate requests
app.use(myMiddleware);
// build multiple CRUD interfaces:
app.get('/:id', (req, res) => res.send(Widgets.getById(req.params.id)));
app.post('/', (req, res) => res.send(Widgets.create()));
app.put('/:id', (req, res) => res.send(Widgets.update(req.params.id, req.body)));
app.delete('/:id', (req, res) => res.send(Widgets.delete(req.params.id)));
app.get('/', (req, res) => res.send(Widgets.list()));
// Expose Express API as a single Cloud Function:
exports.widgets = functions.https.onRequest(app);
Wywołaj funkcję HTTP
Po wdrożeniu funkcji HTTP można ją wywołać za pomocą jej własnego, unikatowego adresu URL. Adres URL zawiera następujące elementy w kolejności:
- Region (lub regiony), w którym wdrożono funkcję. Niektóre funkcje produkcyjne mogą wymagać jawnego ustawienia lokalizacji , aby zminimalizować opóźnienie sieci.
- Twój identyfikator projektu Firebase
-
cloudfunctions.net
- Nazwa Twojej funkcji
Na przykład adres URL wywołujący date()
wygląda następująco:
https://us-central1-<project-id>.cloudfunctions.net/date
Jeśli podczas wdrażania funkcji napotkasz błędy uprawnień, upewnij się, że odpowiednie role IAM są przypisane do użytkownika uruchamiającego polecenia wdrażania.
W przypadku routingu aplikacji Express nazwa funkcji jest dodawana jako prefiks do ścieżek URL w zdefiniowanej aplikacji. Na przykład adres URL do wywołania modułu pobierającego w powyższym przykładzie aplikacji Express wygląda następująco:
https://us-central1-<project-id>.cloudfunctions.net/widgets/<id>
Jeśli wywołujesz funkcje HTTP za zaporą ogniową lub filtrem IP, możesz wyszukać adresy IP używane przez Google do obsługi funkcji HTTP.
Używaj modułów oprogramowania pośredniczącego z Cloud Functions
Jeśli musisz wstrzyknąć zależności oprogramowania pośredniego dla rzeczy takich jak obsługa plików cookie lub CORS, wywołaj je w ramach funkcji. Na przykład, aby włączyć obsługę CORS, dodaj następujący blok:
// Enable CORS using the `cors` express middleware. cors(req, res, () => { // ... });
Odczytaj wartości z żądania
W poniższej tabeli wymieniono niektóre typowe scenariusze:Typ zawartości | Ciało żądania | Zachowanie |
---|---|---|
application/json | '{"name":"John"}' | request.body.name równa się „John” |
application/octet-stream | „mój tekst” | request.body równa się „6d792074657874” (nieprzetworzone bajty żądania; zobacz dokumentację Node.js Buffer ) |
text/plain | „mój tekst” | request.body równa się „mój tekst” |
application/x-www-form-urlencoded | „imię = Jan” | request.body.name równa się „John” |
Ta analiza jest wykonywana przez następujące parsery treści:
- Parser ciała JSON
- Surowy parser ciała
- Parser treści tekstu
- Parser treści formularza zakodowany w adresie URL
Załóżmy, że twoja funkcja jest wywoływana z następującym żądaniem:
curl -X POST -H "Content-Type:application/json" -H "X-MyHeader: 123" YOUR_HTTP_TRIGGER_ENDPOINT?foo=baz -d '{"text":"something"}'
wtedy przesłane dane zmaterializowałyby się pod:
Właściwość/Metoda | Wartość |
---|---|
req.method | "POCZTA" |
req.get('x-myheader') | "123" |
req.query.foo | "baz" |
req.body.text | "coś" |
req.rawBody | Surowe (nieprzetworzone) bajty żądania |
W przykładzie funkcji date()
funkcja testuje zarówno parametr adresu URL, jak i treść pod kątem wartości format
, aby ustawić format daty/godziny, który ma być używany:
let format = req.query.format; format = req.body.format;
Zakończ funkcje HTTP
Zawsze kończ funkcję HTTP za pomocą metody send()
, redirect()
lub end()
. W przeciwnym razie twoja funkcja może nadal działać i zostać wymusiona przez system. Zobacz także Synchronizacja, Asynchronizacja i Obietnice .
Po pobraniu i sformatowaniu czasu serwera za pomocą modułu moment
Node.js, funkcja date()
kończy wysyłaniem wyniku w odpowiedzi HTTP:
const formattedDate = moment().format(`${format}`); functions.logger.log('Sending Formatted date:', formattedDate); res.status(200).send(formattedDate);
Łączenie funkcji HTTP z Hostingiem Firebase
Możesz połączyć funkcję HTTP z Hostingiem Firebase. Żądania w Twojej witrynie Hostingu Firebase mogą być przekazywane do określonych funkcji HTTP. Pozwala to również na użycie własnej domeny niestandardowej z funkcją HTTP. Dowiedz się więcej o łączeniu Cloud Functions z Hostingiem Firebase .