2016-03-24 14 views
1

Wir haben eine NodeJS Express-Anwendung, für die wir ein benutzerdefiniertes Analyse-Backend implementiert haben. Jetzt entscheiden wir, wie wir den Tracking-Mechanismus für JS-deaktivierte Browser wie Feature-Phones implementieren.Express-Middleware für asynchrone Aufrufe

Ein Entwurfsansatz, den wir in Betracht ziehen, ist das Erstellen einer Middleware, die jede Anfrage abfängt, die Parameter aus der Anfrage/dem Kontext extrahiert und sie an das Backend sendet. Dies ist sehr skalierbar und macht einen perfekten Sinn für eine benutzerdefinierte Analyselösung wie die unsere.

Der andere Ansatz wäre, ein Tracking-Pixel wie Google Analytics zu erstellen und dann daraus Daten zu extrahieren. Aber das scheint eine viel weniger skalierbare Lösung für benutzerdefinierte Tracking-Lösungen zu sein, da die Parameter und die Datenstruktur im Gegensatz zu GA an jeder Stelle geändert oder erweitert werden können.

Meine Frage ist das - gibt es irgendwelche Flip-Seiten zur Herstellung einer Middleware, die Async-Anfragen macht? Gibt es etwas, über das wir während der Erstellung Bescheid wissen müssen, da jede Anfrage an unseren Server diese Middleware passieren wird? Unsere App ist ziemlich groß, mit einem Verkehr von Hunderttausenden pro Minute.

+0

Node.js ist vollständig async was ist das Problem? Das Problem könnte sein, wenn Sie Sachen synchronisieren, aber während Sie alles asynchron halten, ist es in Ordnung. –

Antwort

4

Solange Sie Ihre Middleware asynchron halten und bei Bedarf die next() Methode aufrufen, sollten Sie in Ordnung sein. Express kann ziemlich viel Last verarbeiten, sofern Ihre Serverinstanz dafür konfiguriert ist.

Das eigentliche Problem ist, wenn Sie beginnen, synchrone Methoden zu tun, die Sie verwenden könnten/sollten Versprechungen, um ihre Auflösungen richtig zu behandeln.

PROTIP: Vermeiden verschachtelte Versprechen Auflösung so viel wie möglich in Ihrer Middleware/Controller-Logik. Verwenden Sie so etwas wie die .all() Methode von Bluebird, so dass Sie keine Verarbeitungszeit für blockierende Anfragen verschwenden und wenn Sie sequenzielle Rückrufe ausgeben müssen, betrachten Sie asynchrone Wasserfall- oder asynchrone Serien (abhängig von Ihrer bevorzugten Bibliothek) Zusagen versprechen, wenn sie auf vorherige Informationen angewiesen sind. Hilft dabei, Ihren Code sauber zu halten.

Verwandte Themen