Obwohl ich JavaScript recht gut kenne, bin ich verwirrt, was genau diese drei Projekte in Node.js Ökosystem tun. Ist es so etwas wie Rails 'Rack? Kann mir bitte jemand erklären?
Obwohl ich JavaScript recht gut kenne, bin ich verwirrt, was genau diese drei Projekte in Node.js Ökosystem tun. Ist es so etwas wie Rails 'Rack? Kann mir bitte jemand erklären?
Antworten:
[ Update: Ab Version 4.0 verwendet Express Connect nicht mehr. Express ist jedoch weiterhin mit der für Connect geschriebenen Middleware kompatibel. Meine ursprüngliche Antwort ist unten.]
Ich bin froh, dass Sie danach gefragt haben, denn es ist definitiv ein häufiger Punkt der Verwirrung für Leute, die sich Node.js ansehen. Hier ist mein bester Versuch, es zu erklären:
Node.js selbst bietet ein http- Modul an, dessen createServer
Methode ein Objekt zurückgibt, mit dem Sie auf HTTP-Anforderungen antworten können. Dieses Objekt erbt den http.Server
Prototyp.
Connect bietet auch eine createServer
Methode, die ein Objekt zurückgibt, das eine erweiterte Version von erbt http.Server
. Die Erweiterungen von Connect dienen hauptsächlich dazu, das Einstecken von Middleware zu vereinfachen . Aus diesem Grund bezeichnet sich Connect als "Middleware-Framework" und wird häufig mit Ruby's Rack analogisiert.
Express macht, um zu verbinden, was Connect mit dem http-Modul macht: Es bietet eine createServer
Methode, die den Server
Prototyp von Connect erweitert . Damit stehen alle Funktionen von Connect sowie das Rendern von Ansichten und ein praktisches DSL zur Beschreibung von Routen zur Verfügung. Rubys Sinatra ist eine gute Analogie.
Dann gibt es noch andere Frameworks, die noch weiter gehen und Express erweitern! Zappa zum Beispiel, das die Unterstützung für CoffeeScript, serverseitige jQuery und Tests integriert.
Hier ist ein konkretes Beispiel dafür, was unter "Middleware" zu verstehen ist: Standardmäßig werden keine der oben genannten Dateien für Sie bereitgestellt. Aber werfen Sie einfach ein connect.static
(eine Middleware, die mit Connect geliefert wird), die so konfiguriert ist, dass sie auf ein Verzeichnis verweist, und Ihr Server bietet Zugriff auf die Dateien in diesem Verzeichnis. Beachten Sie, dass Express auch die Middleware von Connect bereitstellt. express.static
ist das gleiche wie connect.static
. (Beide waren staticProvider
bis vor kurzem bekannt.)
Mein Eindruck ist, dass die meisten "echten" Node.js-Apps heutzutage mit Express entwickelt werden. Die hinzugefügten Funktionen sind äußerst nützlich, und alle Funktionen der unteren Ebene sind weiterhin verfügbar, wenn Sie dies wünschen.
Die akzeptierte Antwort ist wirklich alt (und jetzt falsch). Hier sind die Informationen (mit Quelle) basierend auf der aktuellen Version von Connect (3.0) / Express (4.0).
http / https, createServer
das einfach einen Rückruf entgegennimmt (req, res), z
var server = http.createServer(function (request, response) {
// respond
response.write('hello client!');
response.end();
});
server.listen(3000);
Middleware ist im Grunde jede Software, die sich zwischen Ihrem Anwendungscode und einer Low-Level-API befindet. Connect erweitert die integrierte HTTP-Serverfunktionalität und fügt ein Plugin-Framework hinzu. Die Plugins fungieren als Middleware und Connect ist daher ein Middleware-Framework
Die Art und Weise, wie das gemacht wird, ist ziemlich einfach ( und tatsächlich ist der Code wirklich kurz! ). Sobald Sie anrufen, erhalten var connect = require('connect'); var app = connect();
Sie eine Funktion app
, die:
.use
( Quelle ) zum Verwalten von Plugins ( die von hier aufgrund dieser einfachen Codezeile stammt ).Aufgrund von 1.) können Sie Folgendes tun:
var app = connect();
// Register with http
http.createServer(app)
.listen(3000);
Kombinieren Sie mit 2.) und Sie erhalten:
var connect = require('connect');
// Create a connect dispatcher
var app = connect()
// register a middleware
.use(function (req, res, next) { next(); });
// Register with http
http.createServer(app)
.listen(3000);
Connect bietet eine Dienstprogrammfunktion, mit http
der Sie sich registrieren können, damit Sie nicht anrufen müssen http.createServer(app)
. Es wird aufgerufen listen
und der Code erstellt einfach einen neuen http-Server, registriert die Verbindung als Rückruf und leitet die Argumente an weiter http.listen
. Aus der Quelle
app.listen = function(){
var server = http.createServer(this);
return server.listen.apply(server, arguments);
};
Sie können also Folgendes tun:
var connect = require('connect');
// Create a connect dispatcher and register with http
var app = connect()
.listen(3000);
console.log('server running on port 3000');
Es ist immer noch dein gutes Alter http.createServer
mit einem Plugin-Framework an der Spitze.
ExpressJS und Connect sind parallele Projekte. Connect ist nur ein Middleware-Framework mit einer schönen use
Funktion. Express hängt nicht von Connect ab ( siehe package.json ). Es macht jedoch alles, was verbindet, dh:
createServer
like connect registriert werden , da es auch nur eine Funktion ist, die ein req
/ res
pair ( Quelle ) annehmen kann .listen
, um sich bei http zu registrierenZusätzlich zu den Funktionen von connect (die Duplikate ausdrücken) bietet es eine Reihe weiterer Funktionen. z.B
Die use
Funktion von ExpressJS und Connect ist kompatibel und daher wird die Middleware gemeinsam genutzt . Beide sind Middleware-Frameworks, Express hat nur mehr als ein einfaches Middleware-Framework .
Meine Meinung: Sie sind ausreichend informiert, um Ihre eigene Wahl zu treffen.
http.createServer
Sie diese Option, wenn Sie etwas wie connect / expressjs von Grund auf neu erstellen.http.createServer
Die meisten Leute sollten nur ExpressJS verwenden.
Dies mag zu einem bestimmten Zeitpunkt wahr gewesen sein, aber jetzt falsch:
das erbt eine erweiterte Version von http.Server
Falsch. Es erweitert es nicht und wie Sie gesehen haben ... verwendet es
Express verbindet sich mit Connect mit dem http-Modul
Express 4.0 hängt nicht einmal von der Verbindung ab. Weitere Informationen finden Sie im aktuellen Abschnitt zu den Abhängigkeiten von package.json
Node.js ist ein Javascript-Motor für die Serverseite.
Zusätzlich zu allen js-Funktionen umfasst es Netzwerkfunktionen (wie HTTP) und den Zugriff auf das Dateisystem.
Dies unterscheidet sich von clientseitigen js, bei denen die Netzwerkaufgaben vom Browser monopolisiert werden und der Zugriff auf das Dateisystem aus Sicherheitsgründen verboten ist.
Etwas, das auf dem Server ausgeführt wird, HTTP versteht und auf Dateien zugreifen kann, klingt wie ein Webserver. Aber es ist keiner.
Damit sich node.js wie ein Webserver verhält, muss es programmiert werden: Behandeln Sie die eingehenden HTTP-Anforderungen und geben Sie die entsprechenden Antworten ein.
Dies ist, was Express tut: Es ist die Implementierung eines Webservers in js.
Das Implementieren einer Website entspricht dem Konfigurieren von Express-Routen und dem Programmieren der spezifischen Funktionen der Website.
Das Bereitstellen von Seiten umfasst eine Reihe von Aufgaben. Viele dieser Aufgaben sind bekannt und sehr häufig, sodass das Connect- Modul des Knotens (eines der vielen Module, die unter dem Knoten ausgeführt werden können) diese Aufgaben implementiert.
Sehen Sie sich das aktuelle beeindruckende Angebot an:
Connect ist das Framework und über dieses können Sie die (Sub-) Module auswählen, die Sie benötigen.
Auf der Seite Contrib Middleware wird eine lange Liste zusätzlicher Middlewares aufgeführt .
Express selbst wird mit den gängigsten Connect-Middlewares geliefert.
Installieren Sie node.js.
Der Knoten wird mit npm , dem Knotenpaketmanager, geliefert .
Der Befehl npm install -g express
lädt Express global herunter und installiert es (siehe Express-Anleitung ).
Wenn Sie express foo
in einer Befehlszeile (nicht im Knoten) ausgeführt werden, wird eine sofort einsatzbereite Anwendung mit dem Namen foo erstellt. Wechseln Sie in das (neu erstellte) Verzeichnis und führen Sie es mit dem Befehl mit dem Knoten aus. node <appname>
Öffnen Sie dann http://localhost:3000
und sehen Sie. Jetzt bist du drin.
Node.js
selbst bietet ein HTTP-Modul an, dessen createServer- Methode ein Objekt zurückgibt, mit dem Sie auf HTTP-Anforderungen antworten können. Dieses Objekt erbt den http.Server
Prototyp.
Zugehörige Informationen, insbesondere wenn Sie NTVS für die Arbeit mit der Visual Studio-IDE verwenden. Das NTVS fügt Visual Studio 2012, 2013 sowohl NodeJS- als auch Express-Tools, Gerüste und Projektvorlagen hinzu.
Außerdem ist das Wort, das ExpressJS oder Connect als "WebServer" aufruft, falsch. Sie können einen einfachen WebServer mit oder ohne diese erstellen. Ein grundlegendes NodeJS-Programm kann das http-Modul auch zur Verarbeitung von http-Anforderungen verwenden und wird so zu einem rudimentären Webserver.
Middleware, wie der Name schon sagt, Middleware befindet sich zwischen Mitte .. Mitte von was? Mitte der Anfrage und Antwort. Wie Anfrage, Antwort, Express-Server in der Express-App sitzen. In diesem Bild sehen Sie, dass Anfragen vom Client kommen. Dann bedient der Express-Server-Server diese Anfragen. Dann lassen Sie uns tiefer gehen. Eigentlich können wir dies teilen Die gesamte Aufgabe des gesamten Express-Servers in kleine separate Aufgaben wie diese. Wie Middleware zwischen Anforderung und Antwort sitzt Kleiner Teil der Serverteile, die eine bestimmte Aufgabe ausführen und die Anforderung an die nächste übergeben. Schließlich wurden alle Aufgaben ausgeführt. Die Antwort wurde ausgeführt. Alle Middleware kann auf das Anforderungsobjekt, das Antwortobjekt und die nächste Funktion der Anforderung zugreifen Reaktionszyklus ..
Dies ist ein gutes Beispiel für die Erklärung von Middleware in Express- YouTube-Videos für Middleware