648 votes

Qu'est-ce que Node.js se Connecter, d'Exprimer et de "middleware"?

En dépit de connaître JavaScript très bien, je suis confus quoi exactement ces trois projets dans Node.js écosystème. Est-il quelque chose comme de Rails pour Rack? Quelqu'un peut-il expliquer?

907voto

Trevor Burnham Points 43199

[Mise à jour: Comme de sa version 4.0, Express n'utilise plus se Connecter. Toutefois, Express est toujours compatible avec le middleware écrit pour vous Connecter. Ma réponse est ci-dessous.]

Je suis heureux que vous ayez posé cette question, parce que c'est certainement un point commun de confusion pour les gens qui cherchent à Node.js. Voici mon meilleur coup à l'expliquer:

  • Node.js lui-même offre une http module, dont l' createServer méthode renvoie un objet que vous pouvez utiliser pour répondre à des requêtes HTTP. Cet objet hérite de l' http.Server prototype.

  • Connectez propose également un createServer méthode, qui renvoie un objet qui hérite d'une version étendue de l' http.Server. Connecter les extensions sont principalement là pour le rendre facile à brancher dans le middleware. C'est pourquoi vous Connecter décrit lui-même comme un "middleware cadre", et est souvent assimilé à Ruby en Rack.

  • Express n'Connecter ce que vous Connecter au module http: Il propose un createServer méthode qui s'étend Connect Server prototype. Donc toutes les fonctionnalités de se Connecter est là, plus le rendu de l'affichage et une pratique DSL pour la description d'itinéraires. Ruby Sinatra est une bonne analogie.

  • Puis il y a d'autres cadres qui vont même plus loin et d'étendre Express! Zappa, par exemple, qui intègre le support de CoffeeScript, côté serveur jQuery, et les tests.

Voici un exemple concret de ce qui est signifié par "middleware": Hors de la boîte, rien de ce qui précède sert des fichiers statiques pour vous. Mais il suffit de jeter en connect.static (un middleware qui vient avec Connect), configuré pour pointer vers un répertoire, et votre serveur de fournir l'accès aux fichiers dans ce répertoire. Notez que l'Express Connect middlewares aussi; express.static est le même que connect.static. (Les deux étaient connus comme staticProvider jusqu'à récemment.)

Mon impression est que la plupart des "vrais" Node.js les applications sont développées avec l'Express de ces jours; les fonctions qu'il ajoute sont extrêmement utiles, et tous les bas-niveau de fonctionnalité est toujours là si vous le voulez.

170voto

basarat Points 22425

L'on a accepté la réponse est très vieux (et maintenant de mal). Voici l'information (avec la source) basé sur la version actuelle de se Connecter (3.0) / Express (4.0).

Ce Node.js vient avec

http / https createServer qui prend tout simplement un rappel(req,res), par exemple

var server = http.createServer(function (request, response) {

    // respond
    response.write('hello client!');
    response.end();

});

server.listen(3000);

Ce connecter ajoute

Le Middleware est fondamentalement un logiciel qui se trouve entre le code de votre application et à faible niveau d'API. Se connecter s'étend le serveur HTTP intégré dans les fonctionnalités et ajoute un module plug-in. Les plugins agir en tant que middleware et donc la connexion est un middleware cadre

La façon dont il le fait est assez simple (et, en fait, le code est très court!). Dès que vous appelez var connect = require('connect'); var app = connect(); vous obtenez une fonction app qui peut:

  1. Peut traiter une requête et renvoyer une réponse. C'est parce que vous obtiendrez de cette fonction
  2. A une fonction membre .use (source) pour gérer les plugins (qui vient d'ici, à cause de cette simple ligne de code).

Parce que de 1.) vous pouvez effectuer les opérations suivantes :

var app = connect();

// Register with http
http.createServer(app)
    .listen(3000);

Combiner 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 d'utilité de s'inscrire avec http , de sorte que vous n'avez pas besoin de faire l'appel à l' http.createServer(app). Elle s'appelle listen et le code crée simplement un nouveau serveur http, inscrivez-vous connecter en tant que le rappel, et transmet les arguments d' http.listen. À partir de la source

app.listen = function(){
  var server = http.createServer(this);
  return server.listen.apply(server, arguments);
};

Ainsi, vous pouvez le 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');

Il est toujours votre bon vieux http.createServer avec un plugin cadre sur le dessus.

Ce ExpressJS ajoute

ExpressJS et connect sont des projets parallèles. Connect est juste un middleware cadre, avec une belle use fonction. Express ne dépend pas de vous Connecter (voir emballage.json). Cependant, il n'est le tout qui se connectent ne je.e:

  1. Peuvent être enregistrés avec createServer comme connecter, car il trop tout simplement une fonction qui peut prendre un req/res paire (source).
  2. Une utilisation de la fonction de registre de middleware.
  3. Un utilitaire listen fonction pour enregistrer avec http

En plus de ce connect fournit (qui expriment les doublons), il a un tas de fonctionnalités en plus. par exemple

  1. A la vue de support moteur.
  2. A haut niveau les verbes (get/post, etc.) pour son routeur.
  3. A paramètres de l'application de soutien.

Le middleware est partagé

L' use fonction de ExpressJS et connect est compatible et, par conséquent, le middleware est partagé. Les deux sont middleware cadres, exprimer un peu plus qu' un simple cadre middleware.

On devrait vous utiliser?

Mon avis. Vous êtes suffisamment informé ^basé sur la ci-dessus^ pour faire votre propre choix.

  • Utiliser http.createServer si vous créez quelque chose comme se connecter / expressjs à partir de zéro.
  • L'utilisation de se connecter si vous êtes à la création du middleware, des protocoles d'essai etc. depuis, c'est une belle abstraction sur le dessus de l' http.createServer
  • Utilisation ExpressJS si vous êtes à la création de sites web.

La plupart des gens devraient juste utiliser ExpressJS.

Quel est le problème à propos de la accepté de répondre à

Ces peut-être vrai que certain point dans le temps, mais mal maintenant:

qui hérite d'une version étendue de http.Serveur

Mal. Il ne veut pas le prolonger et comme vous l'avez vu ... il utilise

Express n'Connecter ce que vous Connecter au module http

Express 4.0 n'est pas encore dépendent de vous connecter. voir le package courant.json à la section des dépendances

80voto

DotNetInfo Points 1377

CELA VA EFFACER TOUS VOS DOUTES ET RÉPONDRE À BEAUCOUP PLUS DE QUESTIONS QUE VOUS AVEZ

Je comprends que c'est trop tard (j'espère que quelqu'un fait défiler vers le bas...), mais la lecture de la suite de l'article du blog sera clairement de toutes les questions que vous avez au sujet de se Connecter, d'Exprimer et de Middleware. Il vous apprend également un peu plus sur Node.js trop. http://evanhahn.com/understanding-express/

70voto

Juan Lanus Points 677

node.js

Node.js est un moteur javascript côté serveur.
En plus de tous les js capacités, il inclut des fonctionnalités de mise en réseau (HTTP), et l'accès au système de fichiers.
Ceci est différent de client-côté js où les tâches de mise en réseau sont monopolisés par le navigateur, et l'accès au système de fichiers est interdite 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 à des fichiers sons comme un serveur web. Mais il n'en est pas une.
Pour faire node.js se comporter comme un serveur web a pour programme: gérer les requêtes HTTP entrantes et apporter les réponses appropriées.
C'est ce que l'Express n': c'est la mise en œuvre d'un serveur web en js.
Ainsi, la mise en œuvre d'un site web, c'est comme la configuration des voies Express, et la programmation du site.

Middleware et se Connecter

Pages servant implique un certain nombre de tâches. Beaucoup de ces tâches sont bien connus et très commun, alors le nœud de Connecter le module de (l'un des nombreux modules disponibles pour s'exécuter sous le nœud) met en œuvre ces tâches.
Voir les impressionner en offrant:

  • enregistreur de demande logger avec support de format personnalisé
  • csrf Cross-site request forgery de protection
  • compresser compression Gzip middleware
  • basicAuth authentification http de base
  • bodyParser extensible du corps de la requête de l'analyseur
  • json application/json analyseur
  • urlencoded application/x-www-form-urlencoded analyseur
  • multipart multipart/form-data analyseur
  • délai d'attente demande de délais d'attente
  • cookieParser cookie analyseur
  • session session de soutien à la gestion groupés de MemoryStore
  • cookieSession cookie de session sur le soutien
  • methodOverride fausse méthode HTTP soutien
  • responseTime calcule les temps de réponse et les expose, par l'intermédiaire de X-Temps de Réponse
  • staticCache mémoire cache couche pour la statique() middleware
  • statique streaming statique serveur de fichiers Gamme de support et plus
  • annuaire inscription à l'annuaire middleware
  • serveur virtuel virtual host sous-domaine de la cartographie middleware
  • favicon efficace favicon serveur (avec l'icône par défaut)
  • limite de limite de la bytesize de corps de la demande de
  • la requête automatique de la chaîne de recherche de l'analyseur, le remplissage req.requête
  • errorHandler flexible gestionnaire d'erreur

Connect est le cadre et à travers elle, vous pouvez choisir la (sous -) modules dont vous avez besoin.
La Contrib Middleware page énumère une longue liste d'autres middlewares.
Exprimer elle-même est livré avec la plupart des communes se Connecter middlewares.

Que faire?

Installer node.js.
Le nœud est livré avec npm, le nœud gestionnaire de paquets.
La commande npm install -g express va télécharger et installer express à l'échelle mondiale (vérifier l' express guide).
L'exécution express foo dans une ligne de commande (pas de nœud) permet de créer un prêt à exécuter, application nommée foo. Le changement de son (nouvellement créé) annuaire et de l'exécuter avec le noeud avec la commande node <appname>, puis ouvrez http://localhost:3000 et à voir. Maintenant, vous êtes dans.

16voto

yojimbo87 Points 27744

Connect offre un "niveau supérieur" Api pour la commune de serveur HTTP fonctionnalités comme la gestion de session, l'authentification, l'exploitation forestière et plus. Express est construit au-dessus de vous Connecter avec la technologie (Sinatra comme fonctionnalité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X