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?
node.js
middleware
tillda
la source
la source
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 duhttp.Server
prototype.Connect propose également une
createServer
méthode qui renvoie un objet qui hérite d'une version étendue dehttp.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 leServer
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 queconnect.static
. (Les deux étaient connusstaticProvider
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 source
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).
Contenu de Node.js
http / https
createServer
qui prend simplement un rappel (req, res) par exempleCe que connecte ajoute
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 fonctionapp
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:
Combinez avec 2.) et vous obtenez:
Connect fournit une fonction utilitaire pour s'enregistrer
http
afin que vous n'ayez pas besoin d'appelerhttp.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 sourceVous pouvez donc:
C'est toujours votre bon vieux
http.createServer
avec un framework de plugin en haut.Ce qu'ExpressJS ajoute
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 pairereq
/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
Le middleware est partagé
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 .Lequel devriez-vous utiliser?
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.
Quel est le problème avec la réponse acceptée
Celles-ci pourraient avoir été vraies à un moment donné, mais elles sont erronées maintenant:
Faux. Il ne l'étend pas et comme vous l'avez vu ... l' utilise
Express 4.0 ne dépend même pas de la connexion. voir la section actuelle des dépendances de package.json
la source
node.js
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é.
node.js en tant que serveur Web: express
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.
Middleware et connect
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.
Que faire?
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 commandenode <appname>
, puis ouvrezhttp://localhost:3000
et voyez. Maintenant vous êtes dedans.la source
Connect propose des API de "niveau supérieur" pour les fonctionnalités courantes du serveur HTTP telles que la gestion de session, l'authentification, la journalisation et plus encore. Express est construit au-dessus de Connect avec des fonctionnalités avancées (de type Sinatra).
la source
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 duhttp.Server
prototype.la source
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.
la source
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
la source
La réponse simple stupide
Connect et Express sont des serveurs Web pour nodejs. Contrairement à Apache et IIS, ils peuvent tous deux utiliser les mêmes modules, appelés «middleware».
la source