node.js - route - node js template




Qu'est-ce que Connect, Express et "middleware" de Node.js? (5)

Bien que je connaisse bien JavaScript, je suis confus de savoir exactement ce que font ces trois projets dans l'écosystème Node.js. Est-ce quelque chose comme Rails 'Rack? Quelqu'un peut-il expliquer s'il vous plaît?


La réponse simple et 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".


node.js

Node.js est un moteur javascript pour le serveur.
En plus de toutes les fonctionnalités de js, il inclut des fonctionnalité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 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 dans le serveur, comprend HTTP et peut accéder aux fichiers ressemble à un serveur Web. Mais ce n'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, implémenter un site web revient à configurer des routes express, et à programmer les fonctionnalités spécifiques du site.

Middleware et Connect

Servir 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 fonctionner sous node) implémente ces tâches.
Voir l'offre impressionnante actuelle:

  • Enregistreur de demande de consignation avec prise en charge de format personnalisé
  • csrf Protection contre les falsifications de requêtes inter-sites
  • compresser le middleware de compression Gzip
  • basicAuth basic http authentication
  • bodyParser extensible demande body parser
  • application json / json parser
  • application encodée / x-www-form-urlencoded parser
  • multipart multipart / form-data parser
  • délais d' attente de demande d' expiration
  • cookieParser cookie parser
  • Prise en charge de la gestion de session de session avec MemoryStore fourni
  • support de session cookieSession basé sur des cookies
  • methodOverride faux support de la méthode HTTP
  • responseTime calcule le temps de réponse et expose via X-Response-Time
  • couche de cache mémoire staticCache pour le middleware static ()
  • serveur de fichiers statique en streaming statique prenant en charge la plage et plus
  • répertoire de répertoires liste middleware
  • vhost middleware de mappage de sous-domaine de l'hôte virtuel
  • favicon serveur favicon efficace (avec l'icône par défaut)
  • limite limite l'octet de taille des instances de requête
  • interroger l'analyseur automatique de querystring, en remplissant req.query
  • gestionnaire d'erreur flexible errorHandler

Connect est le framework et à travers elle vous pouvez choisir les (sous) modules dont vous avez besoin.
La page middleware énumère une longue liste de middlewares supplémentaires.
Express lui-même est livré avec les middlewares Connect les plus courants.

Que faire?

Installez node.js.
Le noeud vient avec npm , le gestionnaire de paquet de noeud .
La commande npm install -g express va télécharger et installer express globalement (consultez le guide express ).
L'exécution de express foo dans une ligne de commande (pas dans un noeud) créera une application prête à l'emploi nommée foo. Accédez à son répertoire (nouvellement créé) et exécutez-le avec un nœud avec le node <appname> commande node <appname> , puis ouvrez http://localhost:3000 et consultez. Maintenant vous êtes dans.


Informations connexes, en particulier si vous utilisez NTVS pour travailler avec l'IDE de Visual Studio. NTVS ajoute à la fois les outils NodeJS et Express, les échafaudages et les 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 réponse acceptée est vraiment ancienne (et maintenant fausse). Voici les informations (avec la source) basées sur la version actuelle de Connect (3.0) / Express (4.0).

Qu'est-ce que Node.js est livré avec

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);

Que connecter ajoute

Middleware est essentiellement tout logiciel qui se trouve entre votre code d'application et une API de bas niveau. Connect étend la fonctionnalité du serveur HTTP intégré et ajoute un cadre de plugin. Les plugins agissent comme middleware et donc connect est un framework middleware

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

  1. Peut gérer une demande et retourner une réponse. C'est parce que vous obtenez essentiellement cette fonction
  2. A un membre .use ( source ) pour gérer les plugins ( qui vient d'ici à cause de cette simple ligne de code ).

En raison de 1.), vous pouvez faire ce qui suit:

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) . Son appelé listen et le code crée simplement un nouveau serveur http, s'enregistre en tant que callback et transmet les arguments à http.listen . De la source

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

Donc, vous pouvez 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 cadre de plugin sur le dessus.

Qu'ajoute ExpressJS

ExpressJS et connect sont des projets parallèles. Connect est juste un framework middleware, avec une fonction d' use agréable. Express ne dépend pas de Connect ( voir package.json ). Cependant, il fait tout ce qui se connecte, c'est à dire:

  1. Peut être enregistré avec createServer like connect car c'est aussi une fonction qui peut prendre une paire req / res ( source ).
  2. Une fonction d'utilisation pour enregistrer le middleware .
  3. Une fonction d' listen utilitaire pour s'enregistrer avec http

En plus de ce que fournit Connect (qui expriment des doublons), il a un tas de fonctionnalités supplémentaires. par exemple

  1. A le support du moteur de vue .
  2. A des verbes de niveau supérieur (get / post etc.) pour son routeur .
  3. A les paramètres de l'application en charge.

Le middleware est partagé

La fonction d' use d'ExpressJS et de 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 assez informé ^ basé sur ci-dessus ^ pour faire votre propre choix.

  • Utilisez http.createServer si vous créez quelque chose comme connect / expressjs à partir de zéro.
  • Utilisez connect si vous créez un middleware, des protocoles de test, etc. car c'est une bonne abstraction sur http.createServer
  • Utilisez ExpressJS si vous créez des sites Web.

La plupart des gens devraient simplement utiliser ExpressJS.

Quel est le problème de la réponse acceptée?

Ceux-ci pourraient avoir été vrai comme un moment donné, mais faux 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 au module http

Express 4.0 ne dépend même pas de se connecter. voir la section des dépendances de package.json en cours


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 .





middleware