Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Legen Sie los: Schreiben, testen und implementieren Sie Ihre ersten Funktionen

Um mit Cloud Functions zu beginnen, versuchen Sie, diese Anleitung durchzuarbeiten, die mit den erforderlichen Einrichtungsaufgaben beginnt und sich durch das Erstellen, Testen und Bereitstellen von zwei verwandten Funktionen erstreckt:

  • addMessage() , die eine URL aussetzt , die einen Textwert akzeptiert und schreibt sie in Cloud - Firestor.
  • makeUppercase() , die Auslöser auf Cloud Firestor Schreib- und verwandelt der Text in Großbuchstaben.

Wir haben Cloud - Firestor gewählt und HTTP-triggered JavaScript - Funktionen für diese Probe teilweise, weil diese Hintergrund - Trigger können gründlich durch die getestet werden Firebase Local Emulator Suite . Dieses Toolset unterstützt auch Echtzeitdatenbank-, PubSub-, Auth- und aufrufbare HTTP-Trigger. Andere Arten von Hintergrund - Trigger wie Remote Config, TestLab und Analytics - Trigger können alle werden interaktiv getestet in dieser Seite mit Toolset nicht beschrieben.

In den folgenden Abschnitten dieses Tutorials werden die Schritte beschrieben, die zum Erstellen, Testen und Bereitstellen des Beispiels erforderlich sind. Wenn Sie lieber nur den Code ausführen und prüfen, geht zum Bewertungs vollständigen Beispielcode .

Erstellen Sie ein Firebase-Projekt

  1. In der Firebase - Konsole , klicken Sie auf Hinzufügen Projekt.

    • Firebase Ressourcen zu einem vorhandenen Google Cloud - Projekt, geben Sie die Projektnamen oder wählen Sie aus dem Drop - Down - Menü hinzuzufügen.

    • Um ein neues Projekt zu erstellen, geben Sie den gewünschten Projektnamen ein. Optional können Sie auch die unter dem Projektnamen angezeigte Projekt-ID bearbeiten.

  2. Wenn Sie dazu aufgefordert, überprüfen und die akzeptieren Firebase Bedingungen .

  3. Klicken Sie auf Weiter.

  4. (Optional) Legen Sie Google Analytics für Ihr Projekt, das Ihnen eine optimale Erfahrung mit einem der folgenden Firebase Produkte haben ermöglicht:

    Wählen Sie entweder ein vorhandenes Google Analytics - Konto oder ein neues Konto zu erstellen.

    Wenn Sie ein neues Konto zu erstellen, wählen Sie Ihren Analytics Standortbericht , dann akzeptieren Sie die Datenfreigabeeinstellungen und Google Analytics Bedingungen für Ihr Projekt.

  5. Klicken Sie auf Create - Projekt (oder Hinzufügen Firebase, wenn Sie ein vorhandenes Google Cloud - Projekt verwenden).

Firebase stellt automatisch Ressourcen für Ihr Firebase-Projekt bereit. Wenn der Vorgang abgeschlossen ist, werden Sie zur Übersichtsseite für Ihr Firebase-Projekt in der Firebase-Konsole weitergeleitet.

Einrichten von Node.js und der Firebase-CLI

Hier finden Sie eine brauchen Node.js Umgebung Schreibfunktionen, und Sie werden die Firebase CLI zu implementierende Funktionen müssen die Cloud - Funktionen Runtime. Für die Installation von Node.js und npm , Knoten Version Manager empfohlen.

Sobald Sie Node.js und NPM installiert haben, die Firebase CLI installieren über Ihre bevorzugte Methode. Um die CLI über npm zu installieren, verwenden Sie:

npm install -g firebase-tools

Dadurch wird der global verfügbare Firebase-Befehl installiert. Wenn der Befehl fehlschlägt, müssen Sie eventuell npm Berechtigungen ändern . Zum Update auf die neueste Version von firebase-tools , erneut ausführen , den gleichen Befehl.

Initialisieren Sie Ihr Projekt

Wenn Sie das Firebase SDK for Cloud Functions initialisieren, erstellen Sie ein leeres Projekt mit Abhängigkeiten und minimalem Beispielcode und wählen entweder TypeScript oder JavaScript zum Erstellen von Funktionen aus. Für diese Anleitung müssen Sie auch Cloud Firestore initialisieren.

So initialisieren Sie Ihr Projekt:

  1. Führen Sie firebase login über den Browser einloggen und die Feuerbasis Werkzeug authentifizieren.
  2. Gehen Sie zu Ihrem Firebase-Projektverzeichnis.
  3. Run firebase init firestore . Für dieses Tutorial können Sie die Standardwerte akzeptieren, wenn Sie nach Firestore-Regeln und Indexdateien gefragt werden. Wenn Sie nicht Wolke Firestor in diesem Projekt noch verwendet haben, werden Sie auch , wie ein Startmodus und einen Speicherort für Firestor auswählen müssen in mit Cloud - Firestor Anfangen .
  4. Run firebase init functions . Das Tool bietet Ihnen die Möglichkeit, Abhängigkeiten mit npm zu installieren. Es ist sicher sinken , wenn Sie auf eine andere Weise verwalten Abhängigkeiten wollen, obwohl , wenn Sie ablehnen tun werden Sie laufen müssen npm install vor Emulation oder Ihre Funktionen bereitstellen.
  5. Das Tool bietet Ihnen zwei Optionen für die Sprachunterstützung:

    Für dieses Tutorial, wählen Sie JavaScript.

Nachdem diese Befehle erfolgreich ausgeführt wurden, sieht Ihre Projektstruktur wie folgt aus:

myproject
 +- .firebaserc    # Hidden file that helps you quickly switch between
 |                 # projects with `firebase use`
 |
 +- firebase.json  # Describes properties for your project
 |
 +- functions/     # Directory containing all your functions code
      |
      +- .eslintrc.json  # Optional file containing rules for JavaScript linting.
      |
      +- package.json  # npm package file describing your Cloud Functions code
      |
      +- index.js      # main source file for your Cloud Functions code
      |
      +- node_modules/ # directory where your dependencies (declared in
                       # package.json) are installed

Die package.json Datei während der Initialisierung erstellt wird, enthält einen wichtigen Schlüssel: "engines": {"node": "10"} . Dies gibt Ihre Node.js-Version zum Schreiben und Bereitstellen von Funktionen an. Sie können andere unterstützte Versionen wählen .

Importieren Sie die erforderlichen Module und initialisieren Sie eine App

Nachdem Sie die Setup-Aufgaben abgeschlossen haben, können Sie das Quellverzeichnis öffnen und mit dem Hinzufügen von Code beginnen, wie in den folgenden Abschnitten beschrieben. Für dieses Beispiel müssen Ihr Projekt die Cloud - Funktionen und Admin SDK Module importieren Knoten mit require Aussagen. Fügen Sie Zeilen wie die folgenden zu Ihrer index.js - Datei:

// The Cloud Functions for Firebase SDK to create Cloud Functions and set up triggers.
const functions = require('firebase-functions');

// The Firebase Admin SDK to access Firestore.
const admin = require('firebase-admin');
admin.initializeApp();

Diese Zeilen laden die firebase-functions und firebase-admin Module und initialisieren Sie eine admin - App - Instanz aus der Cloud - Firestor Änderungen vorgenommen werden können. Überall dort , wo Admin SDK Unterstützung verfügbar ist, wie es für FCM, Authentifizierungs- und Firebase Realtime - Datenbank ist, bietet es eine leistungsstarke Möglichkeit , Firebase mit Cloud - Funktionen zu integrieren.

Die Firebase-Befehlszeilenschnittstelle installiert automatisch die Module Firebase und Firebase SDK for Cloud Functions Node, wenn Sie Ihr Projekt initialisieren. Um 3rd - Party - Bibliotheken zu Ihrem Projekt hinzufügen, können Sie ändern package.json und führen npm install . Weitere Informationen finden Sie Handle Abhängigkeiten .

Fügen Sie die addMessage() Funktion

Für die addMessage() Funktion, fügen Sie diese Zeilen index.js :

// Take the text parameter passed to this HTTP endpoint and insert it into 
// Firestore under the path /messages/:documentId/original
exports.addMessage = functions.https.onRequest(async (req, res) => {
  // Grab the text parameter.
  const original = req.query.text;
  // Push the new message into Firestore using the Firebase Admin SDK.
  const writeResult = await admin.firestore().collection('messages').add({original: original});
  // Send back a message that we've successfully written the message
  res.json({result: `Message with ID: ${writeResult.id} added.`});
});

Die addMessage() Funktion ist eine HTTP - Endpunkt. Jede Anfrage an die Endpoint - Ergebnisse in Express.js-Stil Anfrage und Antwort Objekte auf den übergebenen onRequest() Rückruf.

HTTP Funktionen sind synchron (ähnlich aufrufbare Funktionen ), so sollten Sie eine Antwort so schnell wie möglich und Zurückstellungsarbeiten mit Cloud - Firestor senden. Die addMessage() HTTP - Funktion übergibt einen Textwert an den HTTP - Endpunkt und fügt sie in die Datenbank unter dem Pfad /messages/:documentId/original .

Fügen Sie die makeUppercase() Funktion

Für die makeUppercase() Funktion, fügen Sie diese Zeilen index.js :

// Listens for new messages added to /messages/:documentId/original and creates an
// uppercase version of the message to /messages/:documentId/uppercase
exports.makeUppercase = functions.firestore.document('/messages/{documentId}')
    .onCreate((snap, context) => {
      // Grab the current value of what was written to Firestore.
      const original = snap.data().original;

      // Access the parameter `{documentId}` with `context.params`
      functions.logger.log('Uppercasing', context.params.documentId, original);
      
      const uppercase = original.toUpperCase();
      
      // You must return a Promise when performing asynchronous tasks inside a Functions such as
      // writing to Firestore.
      // Setting an 'uppercase' field in Firestore document returns a Promise.
      return snap.ref.set({uppercase}, {merge: true});
    });

Die makeUppercase() Funktion wird ausgeführt , wenn Cloud - Firestor werden geschrieben. Die ref.set Funktion definiert das Dokument zu hören auf. Aus Performancegründen sollten Sie so genau wie möglich sein.

Zahnspange, zum Beispiel {documentId} -surround „Parameter“ Platzhalter , die ihre passenden Daten in den Rückruf aus.

Cloud Firestor lösen die onWrite() Rückruf , wenn Daten geschrieben oder aktualisiert auf dem angegebene Dokument.

Ereignisgesteuerte Funktionen wie Cloud Firestore-Ereignisse sind asynchron. Die Callback - Funktion sollte entweder eine Rückkehr null , ein Objekt oder ein Versprechen . Wenn Sie nichts zurückgeben, läuft die Funktion ab, signalisiert einen Fehler und wird erneut versucht. Siehe Sync, Async und Versprechungen .

Emulieren Sie die Ausführung Ihrer Funktionen

Die Firebase Local Emulator Suite ermöglicht es Ihnen , und Test - Anwendungen auf dem lokalen Computer zu bauen , anstatt zu einem Projekt von Firebase einzusetzen. Lokale Tests während der Entwicklung werden dringend empfohlen, zum Teil, weil dadurch das Risiko von Codierungsfehlern verringert wird, die in einer Produktionsumgebung (z. B. einer Endlosschleife) möglicherweise Kosten verursachen können.

So emulieren Sie Ihre Funktionen:

  1. Führen Sie firebase emulators:start und die Ausgabe für die URL der Emulator Suite UI überprüfen. Der Standardwert ist localhost: 4000 , kann aber auf einem anderen Port auf Ihrem Rechner gehostet werden. Geben Sie diese URL in Ihren Browser ein, um die Benutzeroberfläche der Emulator Suite zu öffnen.

  2. Überprüfen Sie die Ausgabe der firebase emulators:start für die URL der HTTP - Funktion addMessage() . Es sieht ähnlich wie http://localhost:5001/MY_PROJECT/us-central1/addMessage , mit der Ausnahme , dass:

    1. MY_PROJECT wird mit Ihrem Projekt - ID ersetzt werden.
    2. Der Port kann auf Ihrem lokalen Computer anders sein.
  3. Fügen Sie die Abfrage - String ?text=uppercaseme bis zum Ende der URL der Funktion. Dies sollte ungefähr so aussehen: http://localhost:5001/MY_PROJECT/us-central1/addMessage?text=uppercaseme . Optional können Sie die Nachricht "Großbuchstaben" in eine benutzerdefinierte Nachricht ändern.

  4. Erstellen Sie eine neue Nachricht, indem Sie die URL in einem neuen Tab in Ihrem Browser öffnen.

  5. Sehen Sie sich die Auswirkungen der Funktionen in der Emulator Suite-Benutzeroberfläche an:

    1. Im Register Protokolle sollten Sie neue Protokolle angezeigt , die angibt , dass die Funktionen addMessage() und makeUppercase() lautet:

      i-Funktionen: Beginn der Ausführung von "addMessage"

      i-Funktionen: Beginn der Ausführung von "makeUppercase"

    2. In den Firestor Registerkarte sollten Sie sehen , ein Dokument Ihre ursprüngliche Nachricht sowie die groß geschrieben Version Ihrer Nachricht , die (wenn es ursprünglich „uppercaseme“ ist, werden Sie „UPPERCASEME“ sehen).

Bereitstellen von Funktionen in einer Produktionsumgebung

Sobald Ihre Funktionen im Emulator wie gewünscht funktionieren, können Sie mit dem Bereitstellen, Testen und Ausführen in der Produktionsumgebung fortfahren. Beachten Sie, dass auf die empfohlenen Node.js 14 Laufzeitumgebung zu implementieren, muss Ihr Projekt auf dem Blaze Preisgestaltungsplan . Siehe Preis Cloud - Funktionen .

Um das Tutorial, implementieren Ihre Funktionen und dann ausführen addMessage() auslösen makeUppercase() .

  1. Führen Sie diesen Befehl aus, um Ihre Funktionen bereitzustellen:

    $ firebase deploy --only functions
    

    Nachdem Sie diesen Befehl ausgeführt haben, gibt die Firebase-CLI die URL für alle HTTP-Funktionsendpunkte aus. In Ihrem Terminal sollten Sie eine Zeile wie die folgende sehen:

    Function URL (addMessage): https://us-central1-MY_PROJECT.cloudfunctions.net/addMessage
    

    Die URL enthält Ihre Projekt-ID sowie eine Region für die HTTP-Funktion. Auch wenn Sie sich darum zu kümmern jetzt nicht brauchen, sollten einige Produktion HTTP - Funktionen eine angeben Lage zu Netzwerklatenz zu minimieren.

    Wenn Sie Zugriffsfehler wie „Kann nicht autorisieren Zugang zum Projekt“ begegnen versuchen , Ihr Überprüfung Projekt Aliasing .

  2. Mit Hilfe der addMessage() URL Ausgabe der CLI, fügen Sie einen Textabfrageparameter, und öffnen Sie sie in einem Browser:

    https://us-central1-MY_PROJECT.cloudfunctions.net/addMessage?text=uppercasemetoo
    

    Die Funktion wird ausgeführt und leitet den Browser an die Firebase-Konsole am Datenbankspeicherort um, an dem die Textzeichenfolge gespeichert ist. Dieses Schreib Ereignis löst makeUppercase() , die eine groß geschriebene Version des Strings schreibt.

Nach der Bereitstellung und Funktionen auszuführen, können Sie Protokolle in der Konsole für Cloud Firebase Funktionen anzuzeigen . Wenn Sie benötigen Funktionen löschen in der Entwicklung oder Produktion, verwenden Sie die Firebase CLI.

In der Produktion möchten Sie möglicherweise die Funktionsleistung optimieren und die Kosten kontrollieren, indem Sie die Mindest- und Höchstanzahl der auszuführenden Instanzen festlegen. Siehe Skalierung Regelverhalten für weitere Informationen über diese Laufzeitoptionen.

Vollständigen Beispielcode überprüfen

Hier ist die fertigen functions/index.js die Funktionen enthalten addMessage() und makeUppercase() . Mit diesen Funktionen können Sie einen Parameter an einen HTTP-Endpunkt übergeben, der einen Wert in Cloud Firestore schreibt und ihn dann durch Großbuchstaben aller Zeichen im String umwandelt.

// The Cloud Functions for Firebase SDK to create Cloud Functions and set up triggers.
const functions = require('firebase-functions');

// The Firebase Admin SDK to access Firestore.
const admin = require('firebase-admin');
admin.initializeApp();

// Take the text parameter passed to this HTTP endpoint and insert it into 
// Firestore under the path /messages/:documentId/original
exports.addMessage = functions.https.onRequest(async (req, res) => {
  // Grab the text parameter.
  const original = req.query.text;
  // Push the new message into Firestore using the Firebase Admin SDK.
  const writeResult = await admin.firestore().collection('messages').add({original: original});
  // Send back a message that we've successfully written the message
  res.json({result: `Message with ID: ${writeResult.id} added.`});
});

// Listens for new messages added to /messages/:documentId/original and creates an
// uppercase version of the message to /messages/:documentId/uppercase
exports.makeUppercase = functions.firestore.document('/messages/{documentId}')
    .onCreate((snap, context) => {
      // Grab the current value of what was written to Firestore.
      const original = snap.data().original;

      // Access the parameter `{documentId}` with `context.params`
      functions.logger.log('Uppercasing', context.params.documentId, original);
      
      const uppercase = original.toUpperCase();
      
      // You must return a Promise when performing asynchronous tasks inside a Functions such as
      // writing to Firestore.
      // Setting an 'uppercase' field in Firestore document returns a Promise.
      return snap.ref.set({uppercase}, {merge: true});
    });

Nächste Schritte

In dieser Dokumentation finden Sie weitere Informationen finden allgemeine Konzepte für Cloud - Funktionen sowie Anleitungen für das Schreiben Funktion zu handhaben die Ereignistypen unterstützt von Cloud - Funktionen.

Um mehr über Cloud Functions zu erfahren, können Sie auch Folgendes tun:

Videoanleitung

In den Videoanleitungen erfahren Sie mehr über Cloud Functions. In diesem Video finden Sie eine ausführliche Anleitung zu den ersten Schritten mit Cloud Functions, einschließlich Node.js und CLI-Einrichtung.