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 el Rails 'Rack? ¿Alguien puede explicar?
node.js
middleware
tillda
fuente
fuente
Respuestas:
[ Actualización: a partir de su versión 4.0, Express ya no usa Connect. Sin embargo, Express sigue siendo compatible con el middleware escrito para Connect. Mi respuesta original está abajo.]
Me alegra que hayas preguntado sobre esto, porque definitivamente es un punto común de confusión para las personas que miran Node.js. Aquí está mi mejor oportunidad para explicarlo:
Node.js en sí ofrece un módulo http , cuyo
createServer
método devuelve un objeto que puede usar para responder a solicitudes HTTP. Ese objeto hereda elhttp.Server
prototipo.Connect también ofrece un
createServer
método, que devuelve un objeto que hereda una versión extendida dehttp.Server
. Las extensiones de Connect están principalmente allí para facilitar la conexión de middleware . Es por eso que Connect se describe a sí mismo como un "marco de middleware" y, a menudo, se compara con Ruby's Rack.Express hace lo que Connect hace al módulo http: ofrece un
createServer
método que extiende elServer
prototipo de Connect . De modo que toda la funcionalidad de Connect está ahí, además del renderizado de vistas y un práctico DSL para describir rutas. 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 soporte para CoffeeScript, jQuery del lado del servidor y pruebas.
Aquí hay un ejemplo concreto de lo que se entiende por "middleware": listo para usar, ninguno de los anteriores sirve archivos estáticos para usted. Pero simplemente agregue
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 proporciona los middlewares de Connect;express.static
es el mismo queconnect.static
. (Ambos eran conocidos comostaticProvider
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 toda la funcionalidad de nivel inferior todavía está allí si lo desea.
fuente
La respuesta aceptada es realmente antigua (y ahora incorrecta). Aquí está la información (con fuente) basada en la versión actual de Connect (3.0) / Express (4.0).
Con qué viene Node.js
http / https
createServer
que simplemente toma una devolución de llamada (req, res) ej.Lo que conecta agrega
El middleware es básicamente cualquier software que se encuentra entre el código de su aplicación y alguna API de bajo nivel. Connect amplía 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 marco de middleware
La forma en que lo hace es bastante simple (¡ y de hecho el código es realmente corto! ). Tan pronto como llame
var connect = require('connect'); var app = connect();
, obtendrá una funciónapp
que puede:.use
( fuente ) para administrar complementos ( que viene de aquí debido a esta simple línea de código ).Debido a 1.) puedes hacer lo siguiente:
Combina con 2.) y obtienes:
Connect proporciona una función de utilidad para registrarse
http
y no tener que hacer la llamadahttp.createServer(app)
. Se llamalisten
y el código simplemente crea un nuevo servidor http, la conexión del registro como devolución de llamada y reenvía los argumentoshttp.listen
. De la fuenteEntonces, puedes hacer:
Sigue siendo bueno
http.createServer
con un marco de plugin en la parte superior.Lo que agrega ExpressJS
ExpressJS y connect son proyectos paralelos. Connect es solo un framework de middleware, con una buena
use
función. Express no depende de Connect ( ver package.json ). Sin embargo, hace todo lo que conecta, es decir:createServer
like connect ya que también es solo una función que puede tomar unreq
/res
par ( fuente ).listen
función de utilidad para registrarse con httpAdemás de lo que proporciona connect (que expresa duplicados), tiene muchas más funciones. p.ej
El middleware es compartido
La
use
función 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 ^ en base a lo anterior ^ para tomar su propia decisión.
http.createServer
si está creando algo como conectar / expressjs desde cero.http.createServer
La mayoría de las personas deberían usar ExpressJS.
¿Qué tiene de malo la respuesta aceptada?
Esto podría haber sido cierto en algún momento, pero ahora está mal:
Incorrecto. No lo extiende y como has visto ... lo usa
Express 4.0 ni siquiera depende de la conexión. vea la sección de dependencias package.json actual
fuente
node.js
Node.js es un motor de 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 suena como un servidor web. Pero no es uno.
Para hacer que node.js se comporte como un servidor web, uno debe 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 en el nodo) implementa esas tareas.
Vea la oferta impresionante actual:
Connect es el marco y a través de él puedes elegir los (sub) módulos que necesitas.
La página de Middleware de Contrib enumera una larga lista de middlewares adicionales .
Express en sí viene con los middlewares Connect más comunes.
¿Qué hacer?
Instalar node.js.
El nodo viene con npm , el administrador de paquetes de nodos .
El comando
npm install -g express
descargará e instalará express globalmente (consulte la guía express ).La ejecución
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 comandonode <appname>
, luego ábralohttp://localhost:3000
y vea. Ahora estas dentro.fuente
Connect ofrece un API de "nivel superior" para la funcionalidad común del servidor HTTP, como la administración de sesiones, autenticación, registro y más. Express está construido sobre Connect con funcionalidad avanzada (como Sinatra).
fuente
Node.js
ofrece un módulo HTTP, cuyo método createServer devuelve un objeto que puede usar para responder a las solicitudes HTTP. Ese objeto hereda elhttp.Server
prototipo.fuente
Información relacionada, especialmente si está utilizando NTVS para trabajar con el IDE de Visual Studio. El NTVS agrega herramientas NodeJS y Express, andamios, plantillas de proyectos a Visual Studio 2012, 2013.
Además, el lenguaje que llama a ExpressJS o Connect como "WebServer" es incorrecto. 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.
fuente
middleware como su nombre indica en realidad middleware es sentarse entre medio .. medio de qué? en medio de la solicitud y la respuesta ... cómo la solicitud, la respuesta, el servidor express se sientan en la aplicación express en esta imagen, puede ver que las solicitudes provienen del cliente y luego el servidor del servidor express atiende esas solicitudes ... luego profundicemos ... en realidad podemos dividir esto toda la tarea del servidor express en tareas separadas pequeñas como de esta manera. cómo el middleware se ubica entre la solicitud y la respuesta, una pequeña parte de las partes del servidor que realizan una tarea en particular y pasan la solicitud a la siguiente ... finalmente, se realiza la respuesta de todas las tareas. ciclo de respuesta ..
este es un buen ejemplo para explicar el middleware en video express de youtube para middleware
fuente
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".
fuente