pass node data node.js middleware

node.js - data - next node js



¿Qué es Node.js ''Connect, Express y “middleware”? (7)

La estúpida respuesta simple.

Connect y Express son servidores web para nodejs. A diferencia de Apache e IIS, ambos pueden usar los mismos módulos, denominados "middleware".

A pesar de conocer JavaScript bastante bien, estoy confundido sobre qué hacen exactamente estos tres proyectos en el ecosistema Node.js. ¿Es algo así como Rails ''Rack? ¿Alguien por favor puede explicar?


node.js

Node.js es un motor javascript para el lado del servidor.
Además de todas las capacidades de js, incluye capacidades de red (como HTTP) y acceso al sistema de archivos.
Esto es diferente de js del lado del cliente donde las tareas de red están monopolizadas por el navegador, y el acceso al sistema de archivos está prohibido por razones de seguridad.

node.js como servidor web: express

Algo que se ejecuta en el servidor, entiende HTTP y puede acceder a los archivos como un servidor web. Pero no es uno.
Para hacer que node.js se comporte como un servidor web, uno tiene que programarlo: manejar las solicitudes HTTP entrantes y proporcionar las respuestas apropiadas.
Esto es lo que hace Express: es la implementación de un servidor web en js.
Por lo tanto, implementar un sitio web es como configurar rutas Express y programar las características específicas del sitio.

Middleware y Connect

Servir páginas implica una serie de tareas. Muchas de esas tareas son bien conocidas y muy comunes, por lo que el módulo Connect del nodo (uno de los muchos módulos disponibles para ejecutarse bajo el nodo) implementa esas tareas.
Vea la oferta de impresión actual:

  • registrador solicitud logger con soporte de formato personalizado
  • csrf Protección de falsificación de solicitud de sitio cruzado
  • comprimir Gzip compresión middleware
  • BasicAuth autenticación HTTP básica
  • Analizador de cuerpo de petición extensible bodyParser
  • json application / json parser
  • aplicación urlencoded / x-www-form-urlencoded parser
  • multipart multipart / form-data parser
  • tiempo de espera de tiempo de espera
  • cookieParser cookie parser
  • soporte de sesión de gestión de sesión con MemoryStore empaquetado
  • cookieSession soporte de sesión basado en cookie
  • methodOverride falso soporte del método HTTP
  • responseTime calcula el tiempo de respuesta y expone a través de X-Response-Time
  • Capa de caché de memoria staticCache para el middleware static ()
  • servidor de archivos estáticos de transmisión estática compatible con Rango y más
  • directorio directorio listado de middleware
  • vhost middleware de mapeo de subdominio de host virtual
  • servidor de favicon eficiente de favicon (con el icono predeterminado)
  • límite límite el tamaño de bytes de los cuerpos de solicitud
  • Consultar analizador automático de cadenas de consulta, rellenando req.query
  • errorHandler controlador de errores flexible

Connect es el marco y, a través de él, puede elegir los (sub) módulos que necesita.
La página middleware enumera una larga lista de middlewares adicionales.
Express viene con los middlewares Connect más comunes.

¿Qué hacer?

Instala node.js.
El nodo viene con npm , el gestor de paquetes del nodo .
El comando npm install -g express descargará e instalará Express globalmente (consulte la guía npm install -g express ).
La ejecución de express foo en una línea de comando (no en el nodo) creará una aplicación lista para ejecutar llamada foo. Cambie a su directorio (recién creado) y ejecútelo con el nodo con el comando node <appname> , luego abra http://localhost:3000 y vea. Ahora estas en


Connect ofrece un API de "nivel superior" para las funciones comunes del servidor HTTP, como la administración de sesiones, la autenticación, el registro y más. Express se basa en la funcionalidad Conectar con avanzada (como Sinatra).


Información relacionada, especialmente si está utilizando NTVS para trabajar con el IDE de Visual Studio. NTVS agrega las herramientas de NodeJS y Express, andamios y plantillas de proyectos a Visual Studio 2012, 2013.

Además, la verborrea que llama a ExpressJS o Connect como un "servidor web" es incorrecta. Puede crear un servidor web básico con o sin ellos. Un programa básico de NodeJS también puede usar el módulo http para manejar solicitudes http, convirtiéndose así en un servidor web rudimentario.


La respuesta aceptada es realmente vieja (y ahora incorrecta). Aquí está la información (con fuente) basada en la versión actual de Connect (3.0) / Express (4.0).

Qué Node.js viene con

http / https createServer que simplemente toma una devolución de llamada (req, res) por ejemplo

var server = http.createServer(function (request, response) { // respond response.write(''hello client!''); response.end(); }); server.listen(3000);

Lo que conecta agrega

Middleware es básicamente cualquier software que se encuentra entre el código de su aplicación y alguna API de bajo nivel. Connect extiende la funcionalidad del servidor HTTP incorporado y agrega un marco de plugin. Los complementos actúan como middleware y, por lo tanto, connect es un framework de middleware.

La forma en que lo hace es bastante simple ( y, de hecho, el código es muy corto ). Tan pronto como llame a var connect = require(''connect''); var app = connect(); var connect = require(''connect''); var app = connect(); obtienes una app función que puede:

  1. Puede manejar una solicitud y devolver una respuesta. Esto es porque básicamente obtienes esta función
  2. Tiene una función miembro .use ( source ) para administrar complementos ( que viene de aquí debido a esta simple línea de código ).

Debido a 1.) puedes hacer lo siguiente:

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

Combina con 2.) y obtienes:

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 proporciona una función de utilidad para registrarse con http para que no tenga que hacer la llamada a http.createServer(app) . Se llama " listen y el código simplemente crea un nuevo servidor http, el registro se conecta como devolución de llamada y reenvía los argumentos a http.listen . De la fuente

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

Entonces, puedes hacer:

var connect = require(''connect''); // Create a connect dispatcher and register with http var app = connect() .listen(3000); console.log(''server running on port 3000'');

Sigue siendo tu buen viejo http.createServer con un marco de complemento en la parte superior.

Lo que ExpressJS agrega

ExpressJS y connect son proyectos paralelos. Connect es solo un framework de middleware, con una buena función de use . Express no depende de Connect ( ver package.json ). Sin embargo, hace todo lo que hace, es decir:

  1. Se puede registrar con createServer como connect ya que también es solo una función que puede tomar un par de req / res ( source ).
  2. Una función de uso para registrar middleware .
  3. Una función de listen utilidad para registrarse con http

Además de lo que proporciona Connect (que expresa duplicados), tiene muchas más funciones. p.ej

  1. Tiene soporte de motor de vista .
  2. Tiene verbos de nivel superior (obtener / publicar, etc.) para su enrutador .
  3. Tiene soporte de configuración de aplicaciones .

El middleware es compartido.

La función de use de ExpressJS y connect es compatible y, por lo tanto, se comparte el middleware . Ambos son frameworks de middleware, Express solo tiene más que un simple framework de middleware .

¿Cual deberías usar?

Mi opinión: usted está suficientemente informado ^ basado en lo anterior ^ para hacer su propia elección.

  • Use http.createServer si está creando algo como connect / expressjs desde cero.
  • Use connect si está creando middleware, probando protocolos, etc. ya que es una buena abstracción sobre http.createServer
  • Utilice ExpressJS si está creando sitios web.

La mayoría de la gente debería usar ExpressJS.

¿Qué hay de malo en la respuesta aceptada?

Esto podría haber sido cierto en algún momento, pero ahora está mal:

que hereda una versión extendida de http.Server

Incorrecto. No lo extiende y como has visto ... lo usa.

Express lo hace para conectar lo que Connect hace con el módulo http

Express 4.0 ni siquiera depende de la conexión. Vea la sección de dependencias de package.json actual


[ Actualización: A partir de su versión 4.0, Express ya no usa Connect. Sin embargo, Express sigue siendo compatible con middleware escrito para Connect. Mi respuesta original está abajo.]

Me alegra que hayas preguntado sobre esto, porque definitivamente es un punto de confusión común para las personas que miran Node.js. Aquí está mi mejor oportunidad de explicarlo:

  • Node.js ofrece un módulo http , cuyo método createServer devuelve un objeto que puede utilizar para responder a las solicitudes HTTP. Ese objeto hereda el prototipo http.Server .

  • Connect también ofrece un método createServer , que devuelve un objeto que hereda una versión extendida de http.Server . Las extensiones de Connect están principalmente allí para facilitar la conexión del middleware . Es por eso que Connect se describe a sí mismo como un "framework de middleware", y es a menudo analógico a Ruby''s Rack.

  • Express hace con Connect lo que Connect hace con el módulo http: ofrece un método createServer que extiende el prototipo del Server de Connect. Así que toda la funcionalidad de Connect está ahí, además de la visualización de la vista y un DSL práctico para describir las rutas. El Sinatra de Ruby es una buena analogía.

  • Luego hay otros marcos que van más allá y extienden Express! Zappa , por ejemplo, que integra el soporte para CoffeeScript, jQuery del lado del servidor y las pruebas.

Este es un ejemplo concreto de lo que se entiende por "middleware": Fuera de la caja, ninguno de los anteriores sirve archivos estáticos para usted. Pero solo connect.static (un middleware que viene con Connect), configurado para apuntar a un directorio, y su servidor proporcionará acceso a los archivos en ese directorio. Tenga en cuenta que Express también ofrece middleware de Connect; express.static es lo mismo que connect.static . (Ambos fueron conocidos como staticProvider hasta hace poco.)

Mi impresión es que la mayoría de las aplicaciones "reales" de Node.js se están desarrollando con Express en estos días; las características que agrega son extremadamente útiles, y todas las funcionalidades de nivel inferior siguen ahí si lo desea.


Node.js ofrece un módulo HTTP, cuyo método createServer devuelve un objeto que puede utilizar para responder a las solicitudes HTTP. Ese objeto hereda el prototipo http.Server .