Schreiben Sie schöne Node.js-APIs mit async/await und Firebase

Blog

Es wird ein Fokus auf wunderschönen asynchroner Code, der die |_+_| Funktion in Node.js (verfügbar in v7.6 und höher).



(Fühlen Sie sich frei, süß zu lächeln, während Sie sich von der Rückrufhölle verabschieden






Voraussetzungen

Ich gehe davon aus, dass Sie bereits eine Node.js-Anwendung mit dem Firebase Admin SDK eingerichtet haben. Wenn nicht, dann schau mal bei offizielle Einrichtungsanleitung .



Daten schreiben

Zuerst erstellen wir ein Beispiel |_+_| Endpunkt, der Wörter in unserer Firebase-Datenbankinstanz speichert:



async/await

firebase-write.js






Norton com-Setup geben Sie den Produktschlüssel ein

Dies ist ein sehr einfacher Endpunkt, der ein |_+_| . benötigt und ein |_+_| Wert und speichert dann das angegebene Wort in einem |_+_| Sammlung. Einfach genug.

Aber irgendwas stimmt nicht. Uns fehlt die Fehlerbehandlung! Im obigen Beispiel geben wir ein |_+_| . zurück Statuscode (was bedeutet, dass die Ressource erstellt wurde), auch wenn das Wort nicht ordnungsgemäß in unserer Firebase-Datenbankinstanz gespeichert wurde.

Fügen wir also einige Fehlerbehandlungen hinzu:

POST

firebase-write-error-handling.js

Da der Endpunkt nun genaue Statuscodes zurückgibt, kann der Client dem Benutzer eine relevante Nachricht anzeigen. Beispiel: Word wurde erfolgreich gespeichert. Oder Wort kann nicht gespeichert werden, klicken Sie hier, um es erneut zu versuchen.

Reaktionshierarchiebaum

Hinweis: Wenn Ihnen einige der ES2015+-Syntax unbekannt erscheinen, sehen Sie sich die Babel ES2015-Leitfaden .### Daten lesen

OK, da wir jetzt einige Daten in unsere Firebase-Datenbank geschrieben haben, versuchen wir, daraus zu lesen.

Sehen wir uns zuerst an, was für ein |_+_| endpoint sieht so aus, als ob die ursprüngliche Promise-basierte Methode verwendet wird:

// Dependencies const admin = require('firebase-admin'); const express = require('express'); // Setup const db = admin.database(); const router = express.Router(); // Middleware router.use(bodyParser.json()); // API router.post('/words', (req, res) => { const {userId, word} = req.body; db.ref(`words/${userId}`).push({word}); res.sendStatus(201); });

firebase-read-promise.js

Wieder einfach genug. Vergleichen wir es nun mit einem |_+_| Version des gleichen Codes:

userId

firebase-read.js

Beachten Sie die |_+_| vor den Funktionsparametern hinzugefügtes Schlüsselwort |_+_| und die |_+_| Schlüsselwort, das jetzt vor dem |_+_| . steht Stellungnahme.

Die |_+_| Methode gibt ein Promise zurück, was bedeutet, dass wir die |_+_| Schlüsselwort, um die Ausführung des Skripts zu unterbrechen. (Das Schlüsselwort |_+_| kann mit jedem Versprechen verwendet werden).

Das Finale |_+_| Methode wird nur laufen nach die |_+_| Versprechen wird erfüllt.

Das ist alles schön und gut, aber die wahre Schönheit von |_+_| wird deutlich, wenn Sie mehrere asynchrone Anforderungen verketten müssen.

Angenommen, Sie mussten eine Reihe von asynchronen Funktionen nacheinander ausführen:

word

versprechen-kette.js

Nicht hübsch. Dies ist auch als die Pyramide des Untergangs bekannt (und wir haben noch nicht einmal Fehlerhandler hinzugefügt).

Sehen Sie sich nun das obige Snippet an, das so umgeschrieben wurde, dass es |_+_| verwendet:

words

versprechen-kette-async.js

Keine Pyramide des Untergangs mehr! Außerdem sind alle |_+_| Anweisungen können in ein einzelnes |_+_| . eingeschlossen werden Block, um Fehler zu behandeln:

Wo kann man Bitcoin kaufen sv
201

Promise-Chain-Async-Error-Handling.js

Parallele asynchrone/erwartete Anfragen

Was ist mit Fällen, in denen Sie mehrere Datensätze gleichzeitig aus Ihrer Firebase-Datenbank abrufen müssen?

Einfach. Verwenden Sie einfach die |_+_| Methode zum parallelen Ausführen von Firebase-Datenbankanforderungen:

// API router.post('/words', (req, res) => { const {userId, word} = req.body; db.ref(`words/${userId}`).push({word}, error => { if (error) { res.sendStatus(500); // Log error to external service, e.g. Sentry } else { res.sendStatus(201); } }; });

parallel-async-await.js

Eine Sache noch

Achten Sie beim Erstellen eines Endpunkts zum Zurückgeben von Daten, die von einer Firebase-Datenbankinstanz abgerufen wurden, darauf, nicht einfach das gesamte |_+_| zurückzugeben. Dies kann zu einem Problem beim JSON-Parsing auf dem Client führen.

Angenommen, Ihr Kunde hat den folgenden Code:

GET

client-read.js

Die |_+_| Von Firebase zurückgegebene kann entweder ein JSON-Objekt oder |_+_| . sein wenn kein Datensatz vorhanden ist. Wenn |_+_| zurückgegeben wird, die |_+_| im obigen Snippet wird einen Fehler auslösen, da versucht wird, einen Nicht-Objekttyp zu analysieren.

installiere mysql 5.7 ubuntu

Um sich davor zu schützen, können Sie |_+_| . verwenden um ein Objekt immer an den Client zurückzugeben:

// API router.get('/words', (req, res) => { const {userId} = req.query; db.ref(`words/${userId}`).once('value') .then( snapshot => { res.send(snapshot.val()); }); });

firebase-snapshot.js

Danke fürs Lesen!

Empfohlene Kurse:

Supreme NodeJS-Kurs - Für Anfänger

Lernen Sie Web Scraping mit NodeJs im Jahr 2019 - Der Crashkurs

NodeJS & MEAN Stack - für Anfänger - Auf einfache Weise!

End-to-End mit Ionic4 & Parse/MongoDB auf NodeJS/Express

Wie man Shiba-Münzen kauft

NodeJS - The Complete Guide (inkl. MVC, REST APIs, GraphQL)

#node-js

school.geekwall.in

Schreiben Sie schöne Node.js-APIs mit async/await und Firebase

Schreiben Sie schöne Node.js-APIs mit async/await und Firebase. In diesem Tutorial werden die typischen Anwendungsfälle behandelt, die Ihnen beim Schreiben von RESTful-API-Endpunkten zum Lesen und Schreiben in eine Firebase-Datenbankinstanz begegnen.