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?
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?
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 el http.Server
prototipo.
Connect también ofrece un createServer
método, 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 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 el Server
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 que connect.static
. (Ambos eran 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 toda la funcionalidad de nivel inferior todavía está allí si lo desea.
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).
http / https createServer
que simplemente toma una devolución de llamada (req, res) ej.
var server = http.createServer(function (request, response) {
// respond
response.write('hello client!');
response.end();
});
server.listen(3000);
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ón app
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:
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 http
y no tener que hacer la llamada http.createServer(app)
. Se llama listen
y el código simplemente crea un nuevo servidor http, la conexión del registro como devolución de llamada y reenvía los argumentos 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 bueno http.createServer
con un marco de plugin en la parte superior.
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 un req
/ 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
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 .
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.
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 hace lo que Connect hace al módulo http
Express 4.0 ni siquiera depende de la conexión. vea la sección de dependencias package.json actual
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.
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.
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.
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 comando node <appname>
, luego ábralo http://localhost:3000
y vea. Ahora estas dentro.
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 el http.Server
prototipo.
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.
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