Bien que connaissant assez bien JavaScript, je ne comprends pas ce que fait exactement ces trois projets de l'écosystème Node.js. Est-ce quelque chose comme Rails 'Rack? Quelqu'un peut-il s'il vous plaît expliquer?
[ Mise à jour: À compter de la version 4.0, Express n'utilise plus Connect. Toutefois, Express reste compatible avec les middlewares écrits pour Connect. Ma réponse originale est ci-dessous.]
Je suis heureux que vous ayez posé la question à ce sujet, car il s'agit certainement d'un point de confusion commun pour les personnes qui consultent Node.js. Voici mon meilleur coup pour l'expliquer:
Node.js lui-même offre un module http , dont la méthode createServer
renvoie un objet que vous pouvez utiliser pour répondre aux requêtes HTTP. Cet objet hérite du prototype http.Server
.
Connect propose également une méthode createServer
, qui renvoie un objet qui hérite d'une version étendue de http.Server
. Les extensions de Connect sont principalement là pour faciliter les connexions middleware . C'est pourquoi Connect se décrit comme un "framework middleware" et est souvent analogue à Ruby's Rack.
Express fait pour connecter ce que Connect fait au module http: Il offre une méthode createServer
qui étend le prototype de Connect Server
. Donc, toutes les fonctionnalités de Connect sont là, plus le rendu de la vue et un DSL pratique pour décrire les itinéraires. La Sinatra de Ruby est une bonne analogie.
Ensuite, il existe d'autres cadres qui vont encore plus loin et étendent Express! Zappa , par exemple, qui intègre la prise en charge de CoffeeScript, de jQuery côté serveur et de testing.
Voici un exemple concret de ce que l’on entend par "middleware": À l’origine, aucune de ces réponses ne vous fournit de fichiers statiques. Mais ajoutons simplement connect.static
(un middleware fourni avec Connect), configuré pour pointer vers un répertoire, et votre serveur fournira un accès aux fichiers de ce répertoire. Notez qu'Express fournit également les middlewares de Connect; express.static
est identique à connect.static
. (Les deux s'appelaient staticProvider
jusqu'à récemment.)
Mon impression est que la plupart des "vraies" applications Node.js sont développées avec Express ces jours-ci; les fonctionnalités qu'il ajoute sont extrêmement utiles et toutes les fonctionnalités de niveau inférieur sont toujours présentes si vous le souhaitez.
La réponse acceptée est vraiment ancienne (et maintenant fausse). Voici les informations (avec le source) basées sur la version actuelle de Connect (3.0)/Express (4.0).
http / httpscreateServer
qui prend simplement un rappel (req, res), par exemple.
_var server = http.createServer(function (request, response) {
// respond
response.write('hello client!');
response.end();
});
server.listen(3000);
_
Le middleware est essentiellement un logiciel situé entre le code de votre application et une API de bas niveau. Connect étend la fonctionnalité de serveur HTTP intégrée et ajoute un framework de plugin. Les plugins agissent en tant que middleware et donc connectent est un framework de middleware
La façon dont cela fonctionne est assez simple ( et en fait, le code est vraiment court! ). Dès que vous appelez var connect = require('connect'); var app = connect();
, vous obtenez une fonction app
pouvant:
.use
_ ( source ) pour gérer plugins ( ça vient d'ici à cause de cette simple ligne de code ).En raison de 1.), vous pouvez effectuer les opérations suivantes:
_var app = connect();
// Register with http
http.createServer(app)
.listen(3000);
_
Combinez avec 2.) et vous obtenez:
_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 fournit une fonction utilitaire pour s'enregistrer avec http
afin que vous n'ayez pas besoin d'appeler http.createServer(app)
. Elle s'appelle listen
et le code crée simplement un nouveau serveur http, enregistre la connexion en tant que rappel et transmet les arguments à _http.listen
_. à partir de la source
_app.listen = function(){
var server = http.createServer(this);
return server.listen.apply(server, arguments);
};
_
Alors, tu peux faire:
_var connect = require('connect');
// Create a connect dispatcher and register with http
var app = connect()
.listen(3000);
console.log('server running on port 3000');
_
C'est toujours votre bon vieux _http.createServer
_ avec un framework de plugin sur le dessus.
ExpressJS et connect sont des projets parallèles. Connect est juste un framework middleware, avec une fonction Nice use
. Express ne dépend pas de Connect ( voir package.json ). Cependant, il fait tout ce qui se connecte, c'est-à-dire:
createServer
comme connect, car c’est aussi une fonction pouvant prendre un couple req
/res
( source ).listen
fonction à s'enregistre avec httpEn plus de ce que connect fournit (qui expriment les doublons), il a beaucoup plus de fonctionnalités. par exemple.
La fonction use
d'ExpressJS et connect est compatible et, par conséquent, le middleware est partagé. Les deux sont des frameworks middleware, express a juste plus de n framework middleware simple.
Mon avis: vous êtes suffisamment informé ^ sur la base de ce qui précède ^ pour faire votre propre choix.
http.createServer
_ si vous créez quelque chose comme Connect/Expressjs à partir de zéro.http.createServer
_La plupart des gens devraient simplement utiliser ExpressJS.
Celles-ci auraient pu être vraies à un moment donné, mais fausses maintenant:
qui hérite d'une version étendue de http.Server
Faux. Cela ne l'étend pas et comme vous l'avez vu ... l'utilise
Express fait pour connecter ce que Connect fait au module http
Express 4.0 ne dépend même pas de la connexion. voir la section des dépendances actuelles de package.json
Node.js est un moteur javascript pour le côté serveur.
Outre toutes les fonctionnalités de js, il inclut des fonctionnalités de mise en réseau (comme HTTP) et un accès au système de fichiers.
Ceci est différent de js côté client où les tâches de mise en réseau sont monopolisées par le navigateur et où l’accès au système de fichiers est interdit pour des raisons de sécurité.
Quelque chose qui fonctionne sur le serveur, comprend HTTP et peut accéder aux fichiers ressemble à un serveur Web. Mais ce n'en est pas un.
Pour que node.js se comporte comme un serveur Web, il faut le programmer: gérer les requêtes HTTP entrantes et fournir les réponses appropriées.
C’est ce que fait Express: c’est l’implémentation d’un serveur Web en js.
Ainsi, la mise en place d’un site Web revient à configurer des itinéraires Express et à programmer les caractéristiques spécifiques du site.
Servir des pages implique un certain nombre de tâches. Bon nombre de ces tâches étant bien connues et très courantes, le module Connect du nœud (l'un des nombreux modules pouvant être exécutés sous un nœud) les implémente.
Voir l'offre actuelle impressionnante:
Connect est le cadre et vous permet de choisir les (sous) modules dont vous avez besoin.
La page Contrib Middleware énumère une longue liste de middlewares supplémentaires .
Express est livré avec les middlewares Connect les plus courants.
Installez node.js.
Le noeud vient avec npm , le gestionnaire de package de noeud .
La commande npm install -g express
va télécharger et installer express globalement (consultez le guide express ).
Si vous exécutez express foo
dans une ligne de commande (et non dans un nœud), vous créerez une application prête à fonctionner appelée foo. Accédez à son répertoire (nouvellement créé) et exécutez-le avec noeud avec la commande node <appname>
, puis ouvrez http://localhost:3000
et voyez. Maintenant vous êtes dans.
Connect propose des API "de niveau supérieur" pour les fonctionnalités de serveur HTTP communes telles que la gestion de session, l'authentification, la journalisation, etc. Express est construit sur le dessus de Connect avec des fonctionnalités avancées (similaires à celles de Sinatra).
Node.js
lui-même offre un module HTTP dont la méthode createServer renvoie un objet que vous pouvez utiliser pour répondre aux demandes HTTP. Cet objet hérite du prototype http.Server
.