Funkcję możesz aktywować za pomocą żądania HTTP za pomocą polecenia
functions.https
Dzięki temu możesz wywoływać funkcję synchroniczną za pomocą
te obsługiwane metody HTTP: GET
, POST
, PUT
, DELETE
i
OPTIONS
.
Przykłady na tej stronie oparte na:
funkcja przykładowa
uruchamiany, gdy wysyłasz
żądanie HTTP GET
do punktu końcowego funkcji. Funkcja przykładowa
pobiera bieżący czas serwera i formatuje godzinę zgodnie z zapytaniem adresu URL
i wysyła wynik w odpowiedzi HTTP.
Aktywowanie funkcji za pomocą żądania HTTP
Użyj formatu functions.https
aby utworzyć funkcję, która obsługuje HTTP
zdarzeń. Moduł obsługi zdarzeń funkcji HTTP nasłuchuje
onRequest()
,
który obsługuje routery i aplikacje zarządzane przez
platformę internetową Express.
Korzystanie z obiektów ekspresowych żądań i odpowiedzi
Używany jako argumenty funkcji onRequest()
,
obiekt Request daje
dostęp do właściwości żądania HTTP wysłanego przez klienta oraz
Obiekt Response daje Ci możliwość
wysłać odpowiedź klientowi.
exports.date = functions.https.onRequest((req, res) => { // ... });
Korzystanie z istniejących aplikacji Express
Używanie App jako argumentu
onRequest()
, możesz
przekazać pełną aplikację ekspresową do funkcji HTTP. Kod stały można przenieść
do oprogramowania pośredniczącego, jak pokazano poniżej:
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ływanie funkcji HTTP
Po wdrożeniu funkcji HTTP możesz ją wywołać za pomocą własnej Adres URL. Adres URL zawiera te elementy w kolejności:
- Region (lub regiony), w którym wdrożono funkcję. Niektóre produkcje funkcje mogą wymagać wyraźnego ustawienia atrybutu lokalizacja w celu zminimalizowania opóźnień sieciowych.
- Identyfikator Twojego projektu Firebase
cloudfunctions.net
- Nazwa funkcji
Na przykład URL wywołujący date()
wygląda tak:
https://us-central1-<project-id>.cloudfunctions.net/date
Jeśli podczas wdrażania funkcji wystąpią błędy uprawnień, upewnij się, odpowiednie role uprawnień są przypisaną do użytkownika wykonującego polecenia wdrożeniowe.
W przypadku szybkiego routingu aplikacji nazwa funkcji jest dodawana jako prefiks do ścieżek adresów URL w określonej aplikacji. Na przykład adres URL do wywoływania metody getter w ekspresowym przykład aplikacji powyżej wygląda tak:
https://us-central1-<project-id>.cloudfunctions.net/widgets/<id>
Jeśli wywołujesz funkcje HTTP za zaporą sieciową lub filtrem IP, możesz sprawdzić adresy IP, których Google używa do obsługi funkcji HTTP.
Używanie modułów oprogramowania pośredniczącego w Cloud Functions
Jeśli musisz wstrzyknąć zależności oprogramowania pośredniczącego np. w obsłudze plików cookie czy CORS, wywołaj je w funkcji. Aby na przykład 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 znajdziesz kilka typowych scenariuszy:Typ treści | Treść żądania | Zachowanie |
---|---|---|
application/json |
'{"name":"John"}' |
request.body.name to „Jan” |
application/octet-stream |
„mój tekst” | request.body równa się „6d792074657874” (nieprzetworzone bajty żądania; zapoznaj się z dokumentacją bufora Node.js) |
text/plain |
„mój tekst” | request.body równa się „mój tekst” |
application/x-www-form-urlencoded |
„name=Jan” | request.body.name to „Jan” |
Analiza jest wykonywana przez te parsery treści:
- Parser treści JSON
- Parser surowego ciała
- parser treści tekstu
- parser treści formularza zakodowany w adresie URL
Załóżmy, że Twoja funkcja jest wywoływana za pomocą następującego żądania:
curl -X POST -H "Content-Type:application/json" -H "X-MyHeader: 123" YOUR_HTTP_TRIGGER_ENDPOINT?foo=baz -d '{"text":"something"}'
wówczas wysłane dane będą materializowane w następujący sposób:
Właściwość/metoda | Wartość |
---|---|
req.method |
„POST” |
req.get('x-myheader') |
„123” |
req.query.foo |
„baz” |
req.body.text |
„coś” |
req.rawBody |
Nieprzetworzone (nieprzeanalizowane) bajty żądania |
W przykładowej funkcji date()
funkcja testuje zarówno parametr URL,
treść wartości format
, by ustawić format daty/godziny:
let format = req.query.format; format = req.body.format;
Zakończ funkcje HTTP
Zawsze kończ funkcję HTTP ciągiem send()
, redirect()
,
lub end()
. W przeciwnym razie funkcja może być nadal uruchomiona
może zostać wymuszone przez system. Zobacz też
Synchronizacja, asynchronizacja i obietnice.
Po pobraniu i sformatowaniu czasu serwera za pomocą Node.js
Moduł moment
, funkcja date()
kończy się przez wysłanie 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 Firebase Hosting
Z funkcją Firebase Hosting możesz połączyć funkcję HTTP. Prośby dotyczące Witryna Firebase Hosting może być połączona z określonymi funkcjami HTTP przez serwer proxy. To także umożliwia użycie własnej domeny z funkcją HTTP. Więcej informacji o Łączę aplikację Cloud Functions z usługą Firebase Hosting.