Dieser Blog Post erklärt wie man mit einen kleinen HTTP Service Redis durchsucht und mit dem Ergebnis antwortet.
Mittels Node.js werden wir uns einen kleinen Server programmieren, der auf die Such - Requests antwortet.
Grundlegendes
Wir erstellen im Verzeichnis ./gatsby-srv eine neue package.json mit dem Befehl npm create und danach installieren wir einige Node Module, die wir benötigen werden.
Falls Sie den ersten Teil noch nicht gelesen haben oder Sie einfach gerne den Server fertig hätten bevor Sie gatsby build ausführen um den Index zu erstellen, dann habe ich hier eine index.json und sitemap.json zum Testen.
Der Server
Optionen wie zum Beispiel IP Addresse und Port, sollen über Argumente beim Start einstellbar sein. Neben dem Logging in der Shell Ausgabe soll eine Log - Datei genutzt werden. Die Redis Datenbank wird optional aus einer Datei neu erstellt damit sie auch nach einem Neustart im RAM verfügbar ist und ein HTTP Server wird die Suchanfragen beantworten.
Initialisierung
Wir laden als erstes alle Module, die wir benötigen und initialisieren unsere globalen Variablen.
Winston
Nun erklären wir Winston wie und wo es loggen soll. Mit .replace(/(\x1b\[)(\w){2,3}/g, '') suchen wir nach allen Textfarben, die in der Kommandozeile dargestellt werden und entfernen diese. In der Log - Datei werden die nicht dargestellt und übrig würde ein \x1b[33m $ \x1b[0m bleiben.
Funktion zum Erstellen der Datenbank
Als erstes versuchen wir die indexFile zu laden. Danach erstellen wir den Redis Client und laden den kompletten Content in Redis ein. Die Funktion gibt ein Promise zurück damit sie trotz Callback in einer asynchronen Funktion mit await aufgerufen werden kann.
Start Argumente
Wir iterieren durch das Array der Argumente und weisen den ensprechenden Optionen ihren neuen Werte zu.
HTTP Request und Redis durchsuchen
Wir initialisieren den Redis Clienten damit wir eine Query an Redis weitergeben können, die wir von einen HTTP Request erhalten. Express antwortet mit einen JSON Dokument, das alle Ergebnisse beinhaltet, oder einen internen Serverfehler (500).
Laden der Sitemap und HTTP Server starten
Wir laden die Sitemap und starten den HTTP Server. Im Falle eines Fehler wird dieser ausgegeben und die Anwendung wird beendet.
Mit dem Befehl node . create-db sollten wir nun aus den Test - Dateien die Datenbank erstellen können. Danach können wir den Server mit node . starten.
Wenn alles funktioniert, sollte die URL http://localhost/search?q=ffmpeg ein in JSON kodiertes Dokument im Browser aufrufen.
PM2 zur Prozessverwaltung
Damit der Server sich wie ein Daemon verhält und er im Fehlerfall automatisch wiedr startet, kann an ihn mittels PM2 starten.
Der Server und das Plugin sind nun fertig. Der abschließende Teil behandelt dann die Änderungen an der React Suchkomponente für Gatsby.