Bien que je connaisse assez bien JavaScript, je ne sais pas exactement ce que font exactement ces trois projets dans l'écosystème Node.js. Est-ce quelque chose comme Rails 'Rack? Quelqu'un peut-il expliquer?
Bien que je connaisse assez bien JavaScript, je ne sais pas exactement ce que font exactement ces trois projets dans l'écosystème Node.js. Est-ce quelque chose comme Rails 'Rack? Quelqu'un peut-il expliquer?
Réponses:
[ Mise à jour: depuis sa version 4.0, Express n'utilise plus Connect. Cependant, Express est toujours compatible avec le middleware écrit pour Connect. Ma réponse originale est ci-dessous.]
Je suis content que vous ayez posé des questions à ce sujet, car c'est certainement un point de confusion courant pour les personnes qui consultent Node.js. Voici mon meilleur coup pour l'expliquer:
Node.js lui-même propose un module http , dont la createServer
méthode renvoie un objet que vous pouvez utiliser pour répondre aux requêtes HTTP. Cet objet hérite du http.Server
prototype.
Connect propose également une createServer
méthode qui renvoie un objet qui hérite d'une version étendue de http.Server
. Les extensions de Connect sont principalement là pour faciliter le branchement du middleware . C'est pourquoi Connect se décrit comme un «framework middleware» et est souvent analogue à Ruby's Rack.
Express fait à Connect ce que Connect fait au module http: il offre une createServer
méthode qui étend le Server
prototype de Connect . Ainsi, toutes les fonctionnalités de Connect sont là, plus le rendu de vue et un DSL pratique pour décrire les itinéraires. Le Sinatra de Ruby est une bonne analogie.
Ensuite, il existe d'autres frameworks qui vont encore plus loin et étendent Express! Zappa , par exemple, qui intègre la prise en charge de CoffeeScript, jQuery côté serveur et les tests.
Voici un exemple concret de ce que l'on entend par «middleware»: prêt à l'emploi, aucun des éléments ci-dessus ne vous sert de fichiers statiques. Mais lancez simplement connect.static
(un middleware fourni avec Connect), configuré pour pointer vers un répertoire, et votre serveur donnera accès aux fichiers de ce répertoire. Notez qu'Express fournit également les middlewares de Connect; express.static
est le même que connect.static
. (Les deux étaient connus 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 là si vous le souhaitez.
La réponse acceptée est vraiment ancienne (et maintenant fausse). Voici les informations (avec source) basées sur la version actuelle de Connect (3.0) / Express (4.0).
http / https createServer
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 n'importe quel logiciel situé entre votre code d'application et une API de bas niveau. Connect étend la fonctionnalité de serveur HTTP intégrée et ajoute un cadre de plug-in. Les plugins agissent comme middleware et donc connect est un framework middleware
La façon dont cela se fait 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
qui peut:
.use
( source ) pour gérer les plugins ( qui 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 http
afin que vous n'ayez pas besoin d'appeler http.createServer(app)
. Il est appelé listen
et le code crée simplement un nouveau serveur http, enregistre la connexion comme rappel et transmet les arguments à http.listen
. De la source
app.listen = function(){
var server = http.createServer(this);
return server.listen.apply(server, arguments);
};
Vous pouvez donc:
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 en haut.
ExpressJS et connect sont des projets parallèles. Connect est juste un framework middleware, avec une belle use
fonction. 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 juste une fonction qui peut prendre une paire req
/ res
( source ).listen
fonction utilitaire pour s'enregistrer auprès de httpEn plus de ce que fournit Connect (qui exprime les doublons), il a un tas de fonctionnalités supplémentaires. par exemple
La use
fonction ExpressJS et connect est compatible et donc le middleware est partagé . Les deux sont des frameworks middleware, express a juste plus qu'un simple framework middleware .
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 pourraient avoir été vraies à un moment donné, mais elles sont erronées maintenant:
qui hérite d'une version étendue de http.Server
Faux. Il ne l'étend pas et comme vous l'avez vu ... l' utilise
Express fait pour connecter ce que Connect fait pour le module http
Express 4.0 ne dépend même pas de la connexion. voir la section actuelle des dépendances de package.json
Node.js est un moteur javascript côté serveur.
En plus de toutes les capacités js, il comprend des capacités de mise en réseau (comme HTTP) et l'accès au système de fichiers.
Ceci est différent des js côté client où les tâches de mise en réseau sont monopolisées par le navigateur, et l'accès au système de fichiers est interdit pour des raisons de sécurité.
Quelque chose qui s'exécute sur le serveur, comprend HTTP et peut accéder aux fichiers sonne comme 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 œuvre d'un site Web revient à configurer des itinéraires Express et à programmer les fonctionnalités spécifiques du site.
Le service des pages implique un certain nombre de tâches. Beaucoup de ces tâches sont bien connues et très courantes, donc le module Connect de node (l'un des nombreux modules disponibles pour s'exécuter sous node) implémente ces tâches.
Voir l'offre impressionnante actuelle:
Connect est le cadre et à travers lui, vous pouvez choisir les (sous) modules dont vous avez besoin.
La page Contrib Middleware énumère une longue liste de middlewares supplémentaires .
Express lui-même est fourni avec les middlewares Connect les plus courants.
Installez node.js.
Le nœud est fourni avec npm , le gestionnaire de packages de nœuds .
La commande npm install -g express
va télécharger et installer express globalement (consultez le guide express ).
L'exécution express foo
dans une ligne de commande (pas dans le nœud) créera une application prête à l'emploi nommée foo. Passez à son répertoire (nouvellement créé) et exécutez-le avec node avec la commande node <appname>
, puis ouvrez http://localhost:3000
et voyez. Maintenant vous êtes dedans.
Node.js
lui-même propose 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 http.Server
prototype.
Informations connexes, en particulier si vous utilisez NTVS pour travailler avec l'IDE Visual Studio. Le NTVS ajoute des outils NodeJS et Express, des échafaudages et des modèles de projet à Visual Studio 2012, 2013.
En outre, le verbiage qui appelle ExpressJS ou Connect en tant que "WebServer" est incorrect. Vous pouvez créer un WebServer de base avec ou sans eux. Un programme NodeJS de base peut également utiliser le module http pour gérer les requêtes http, devenant ainsi un serveur Web rudimentaire.
middleware comme son nom l'indique réellement middleware est assis entre milieu .. milieu de quoi? milieu de la demande et de la réponse .. comment la demande, la réponse, le serveur express sont assis dans l'application express sur cette image, vous pouvez voir que les demandes proviennent du client, puis le serveur du serveur express sert ces demandes .. puis permet de creuser plus profondément .. en fait, nous pouvons diviser cela toute la tâche du serveur express entier dans de petites tâches séparées comme de cette façon. comment le middleware se situe entre la demande et la réponse petit morceau de parties de serveur faisant une tâche particulière et passé la demande à la suivante .. enfin faire toutes les tâches la réponse a été faite .. tout le middleware peut accéder à l'objet de la demande, l'objet de la réponse et la fonction suivante de la demande cycle de réponse ..
c'est un bon exemple pour expliquer le middleware dans une vidéo youtube express pour middleware