Erstellen Sie nach dem Installieren von Knoten (Download) ein Verzeichnis auf Ihrem Computer und starten Sie Ihre erste Anwendung.
$ mkdir Hallo-Welt
In diesem Verzeichnis definieren Sie das Anwendung "Paket", das sich nicht von einem anderen Knotenpaket unterscheidet. Die JSON -Datei im Dateiverzeichnis definiert deutlich eine Abhängigkeit. Sie können den Befehl npm verwenden, um die neueste Version von Express zu erhalten, die Sie gerne tun, anstatt eine andere Version als "3.x" zu installieren, um unbekannte Überraschungen zu verhindern.
{"Name": "Hallo-Welt", "Beschreibung": "Hello World Test App", "Version": "0.0.1", "privat": wahr, "Abhängigkeiten": {"Express": "3.x"}}Jetzt haben Sie ein Paket. In diesem Verzeichnis können Sie NPM (1) verwenden, um diese Abhängigkeit zu installieren. In diesem Fall müssen Sie nur eingeben:
$ npm install
Sobald NPM fertig ist, haben Sie einen Express 3.x, auf den Sie im Verzeichnis /node_modules abhängig sind. Sie können dies mit NPM LS verifizieren, genau wie der Expressbaum und seine eigenen Abhängigkeiten, die im folgenden Code -Snippet angezeigt werden.
$ npm [email protected] /private/tmp└─┬ [email protected] ├── [email protected] ├─┬ [email protected] │ ├── [email protected] │ ├── [email protected] │ ├── [email protected] │ ├── [email protected] │ └── [email protected] ├── [email protected] ├── [email protected] ├── [email protected] ├── [email protected] ├── [email protected] ├── [email protected] ├─┬ [email protected] │ └── [email protected] └─┬ [email protected] └── [email protected]
Erstellen Sie nun die Anwendung selbst! Erstellen Sie eine Datei namens app.js oder server.js, unabhängig davon, welches Sie mögen, stellen Sie Express ein und verwenden Sie dann Express (), um eine neue Anwendung zu erstellen:
var express = require ('express'); var app = express ();Neue Anwendungsinstanzen können über app.verb () Routen definieren. Req und Res sind genau die gleichen Knotenobjekte, die Ihnen zur Verfügung gestellt wurden. Sie können res.pipe (), req.on ('Daten', Rückruf) und andere Dinge nennen, die du tun würdest, die nichts mit Express zu tun haben.
Express verbessert diese Objekte, um Ihnen höhere Schnittstellen wie res.send () zu bieten, und zusätzlich zu Ihnen hinzufügen:
app.get ('/hello.txt', function (req, res) {res.send ('Hallo Welt');});Rufen Sie nun die Methode app.Listen () auf, damit die Verbindung zu Binden und Anhören dieselben Parameter wie das Net.Server #Listen () des Knotens akzeptiert:
var server = app.listen (3000, function () {console.log ('Hören auf Port %d', server.address (). Port);});Verwenden Sie Express (1), um die Anwendung zu generieren
Das Express-Team unterhält einen bequemen Projektgenerator mit dem Namen Express-Generator (1). Wenn Sie Express-Generator weltweit mit NPM installieren, können Sie von überall auf Ihrem Computer darauf zugreifen:
$ npm install -g Express -Generator
Dieses Tool bietet eine einfache Möglichkeit, ein Anwendungsframework zu erhalten, aber mit begrenztem Umfang unterstützt es beispielsweise nur wenige Vorlagenmotoren und unterstützt das Erstellen aller Website -Framework -Vorlagen für Knoten. Sie können es durch Hilfe anzeigen:
Verwendung: Express [Optionen] Optionen: -h, -Help -Ausgangsnutzungsinformationen -v, --version Ausgabe Die Versionsnummer -e, --ejs add EJS Engine Support (Standardeinstellungen an Jade) -H, - -hoogan add Hogan.js Engine -Unterstützung -c, - -cs
Wenn Sie eine Anwendung generieren möchten, die in jedem Fall unterstützt wird, müssen Sie nur einfach ausführen ::
$ express --css stylus myappcreate : myappcreate : myapp/package.jsoncreate : myapp/app.jscreate : myapp/publiccreate : myapp/public/javascriptscreate : myapp/public/imagecreate : myapp/public/stylesheetscreate : myapp/public/stylesheets/style.stylcreate : MyApp/Routes/Index.jscreate: MyApp/Ansichten/Index.jadecreate: MyApp/Ansichten/Layout.jadeinstall Abhängigkeiten: $ CD MyApp && npm installrun die App: $ Debug = MyApp Node App
Wie bei jeder anderen Knotenanwendung müssen Sie die folgenden Abhängigkeiten installieren:
Dann fangen wir an.
$ npm Start
Dies ist alles, was Sie benötigen, um eine einfache Anwendung zum Laufen zu bringen. Denken Sie daran, Express ist nicht an eine bestimmte Verzeichnisstruktur gebunden, diese sind nur eine Anleitung für Sie. Die Auswahl der Anwendungsstruktur kann im Github -Repository angezeigt werden.
Fehlerbehandlung
Die Middleware -Definitionen für Fehlerhandhabungen sind wie gewöhnliche Middleware, aber 4 Parameter müssen definiert werden, was die Funktionssignatur ist (Err, Req, Res, Weiter):
app.use (function (err, req, res, next) {console.Error (err.stack); res.send (500, 'etwas brach!');});Obwohl Middleware für erzwungene Fehler am Ende normalerweise nicht definiert ist, sieht er nach anderen App.Use () nicht definiert: sein Anruf sieht folgendermaßen aus:
var bodyparser = required ('body-parser'); var methodeOverride = require ('methode-override'); app.use (bodyParser ()); App.use (methodeOverride ()); app.use (app.router); app.use (Funktion (ERR, req, res, next) {// Logic});;Die Antwort in diesen Middleware ist vollständig willkürlich. Möglicherweise möchten Sie auf eine HTML -Fehlerseite, eine einfache Nachricht, eine JSON -Zeichenfolge oder eine andere Antwort antworten, die Ihnen gefällt.
Um ein organisiertes und höheres Framework zu erstellen, können Sie einige dieser Fehler mit Middleware definieren, genau wie Sie normale Middleware definieren würden. Nehmen wir beispielsweise an, Sie möchten einen Fehlerhandler für eine XHR -Anfrage definieren. Zusätzlich dazu könnten Sie wie folgt tun:
var bodyparser = required ('body-parser'); var methodeOverride = Request ('Methode-Override'); app.use (bodyparser ()); app.use (methodeOverride ()); App.use (App.Router); App.use (Lokerrors); App.use (ClientErrorHandler); App.use (ERRAGEHALTLER);In allgemeineren Loggerrors können Sie Anforderungen und Fehlermeldungen an STDERR, Loggly oder ähnliche Dienste schreiben:
Funktionslagerrors (Err, Req, Res, Next) {console.Error (Err.Stack); Weiter (arr);}Die Definition von ClientErrorHandler ist unten angezeigt. Beachten Sie, dass dieser Fehler explizit an die nächste übergeben wird.
Funktion ClientErrorHandler (Err, Req, Res, Next) {if (req.xhr) {res.send (500, {error: 'etwas ist in die Luft gesprengt!'}); } else {next (err); }}Die folgende Fehlerhandler-Implementierung "Allround" kann definiert werden als:
Funktion ERRAGEHANDLER (ERR, REQ, RES, NEXT) {res.status (500); res.render ('error', {error: err});}Benutzer online zählen
In diesem Abschnitt wird eine (kleine) Anwendung im Detail erläutert und verwendet Redis, um die Anzahl der Benutzer online zu verfolgen. Erstellen Sie zuerst ein Paket. Die JSON -Datei enthält zwei Anhänge, eine für den Redis -Client und die andere für den Express selbst. Stellen Sie außerdem sicher, dass Sie Redis eingewickelt und $ Redis-Server durchlaufen haben.
{"Name": "App", "Version": "0.0.1", "Abhängigkeiten": {"Express": "3.x", "Redis": "*"}}Als nächstes müssen Sie eine Anwendung und eine Verbindung zu Redis erstellen:
var express = require ('exprim'); var reus = require ('redis'); var db = redis.createclient (); var app = express ();Die nächste Middleware verfolgt Online -Benutzer. Hier werden wir das sortierte Set verwenden, damit wir Online -Benutzer mit Redis abfragen können, was nur N -Millisekunden benötigt. Wir verwenden Zeitstempel als "Online -Standard" für Mitglieder. Beachten Sie, dass wir hier die Benutzer-Agent-Zeichenfolge anstelle der üblichen Benutzer-ID verwenden.
app.use (function (req, res, next) {var ua = req.headers ['user-Agent']; db.zadd ('online', date.now (), ua, next);});Die nächste Middleware besteht darin, ZrevrangeByscore in letzter Minute zu verwenden, um die maximale Anzahl von Online -Benutzern zu erhalten. Wir erhalten immer die neuesten Online -Benutzer.
app.use (function (req, res, next) {var min = 60 * 1000; var und Datum.now () - min; db.zrevrangeByscore ('Online', '+inf', vor, Funktion (err, user, user) {if (err) weiter zurück (err);Schließlich verwenden wir es über eine URL und binden es an einen Port! Das ist alles, wenn man auf diese App in einem neuen Browser zugreift, und Sie werden eine Zunahme der Anzahl der Personen online sehen.
app.get ('/', function (req, res) {res.send (req.online.length + 'Benutzer online');}); app.listen (3000);Reverse Proxy für Express
Die Verwendung von Express hinter Reverse Proxy, wie z. B. Lack oder Nginx, ist trivial, erfordert jedoch eine Konfiguration. Durch die Aktivierung des "Trust Proxy" -App.Enable ("Trust Proxy") verfügt Express über einige Tricks für Reverse-Proxying, X-Forward-*-Headerfelder können vertrauenswürdig sein, da sie sonst möglicherweise leicht ausgetrickt werden können.
Das Aktivieren dieser Einstellung hat einige subtile Auswirkungen. Das erste ist, dass X-Forwarded-Proto von Reverse Proxy festgelegt werden kann und der App mitteilt, dass es sich um HTTPS oder nur ein einfaches HTTP handelt. Dieser Wert spiegelt sich durch Req.Protocol wider.
Die zweite Änderung besteht darin, dass die Werte von Req.IP und Req.ip die Liste der X-Forted-for-Adressen ausfüllen.
Debugg Express
Express verwendet das Debug -Modul intern, um Informationen über Pfadanpassung und Anwendungsmuster aufzuzeichnen. Um diese Nachricht anzuzeigen, legen Sie einfach die Debug -Umgebungsvariable so fest, dass sie ausdrückt:*, und nach dem Start der Anwendung sehen Sie die Debug -Informationen in der Konsole.
$ Debug = express:* node ./bin/www
Durch das Ausführen dieses Hello World -Beispiels wird Folgendes gedruckt:
Express: Anwendungsbooting im Entwicklungsmodus +0msexpress: Router definiert get /hello.txt +0msexpress: Router Defined get /hello.txt +1ms
Darüber hinaus verwendet das vom Ausdruck ausführbare Datei (Generator) generierte Programm auch ein Debug-Modul, und der Standardbereich ist der Debug-Namespace für My-Application.
Sie können diese Debugging -Aussagen mit dem folgenden Befehl aktivieren
$ Debug = my-application node ./bin/www
Weitere Informationen zum Debugging finden Sie im Debugging Guide