Casi todas las aplicaciones Express que veo tienen una app.use
declaración para el middleware, pero no he encontrado una explicación clara y concisa de qué es realmente el middleware y qué app.use
está haciendo la declaración. Incluso los documentos expresos en sí mismos son un poco vagos en esto. ¿Me puede explicar estos conceptos por favor?
228
Respuestas:
middleware
Estoy a medio camino de separar el concepto de middleware en un nuevo proyecto.
Middleware le permite definir una pila de acciones por las que debe pasar. Los servidores Express son una pila de middlewares.
Luego puede agregar capas a la pila de middleware llamando
.use
Una capa en la pila de middleware es una función, que toma n parámetros (2 para express,
req
&res
) y unanext
función.Middleware espera que la capa haga algunos cálculos, aumente los parámetros y luego llame
next
.Una pila no hace nada a menos que la manejes. Express manejará la pila cada vez que una solicitud HTTP entrante sea atrapada en el servidor. Con middleware manejas la pila manualmente.
Un ejemplo más completo:
En términos expresos, simplemente define una pila de operaciones que desea que express maneje para cada solicitud HTTP entrante.
En términos de express (en lugar de conectar), tiene middleware global y middleware específico de ruta. Esto significa que puede adjuntar una pila de middleware a cada solicitud HTTP entrante o solo adjuntarla a solicitudes HTTP que interactúen con una ruta determinada.
Ejemplos avanzados de express y middleware:
fuente
app.use()
sintaxis. ¿Cuál es el valor de retorno real del middleware y qué haceuse
con él?Después de simplificar las cosas, un servidor web puede verse como una función que acepta una solicitud y genera una respuesta. Entonces, si ve un servidor web como una función, puede organizarlo en varias partes y separarlas en funciones más pequeñas para que la composición de ellas sea la función original.
Los middlewares son las funciones más pequeñas que puede componer con otros y el beneficio obvio es que puede reutilizarlas.
fuente
Agrego una respuesta tardía para agregar algo que no se menciona en las respuestas anteriores.
Por ahora debería estar claro que el middleware es / son las funciones que se ejecutan entre la solicitud del cliente y la respuesta del servidor . La funcionalidad de middleware más común necesaria es la gestión de errores, la interacción de la base de datos, la obtención de información de archivos estáticos u otros recursos. Para moverse en la pila de middleware, se debe llamar a la siguiente devolución de llamada, puede verla al final de la función de middleware para pasar al siguiente paso del flujo.
Puede usar el
app.use
enfoque y tener un flujo como este :pero también puede usar otro enfoque y pasar cada middleware como argumentos de función. Aquí hay un ejemplo del sitio web de MooTools Nodejs donde midleware obtiene el flujo de Twitter, Github y Blog antes de que
response
se envíe nuevamente al cliente. Observe cómo se pasan las funciones como argumentos enapp.get('/', githubEvents, twitter, getLatestBlog, function(req, res){
. El usoapp.get
solo se llamará para solicitudes GET,app.use
se llamará para todas las solicitudes.fuente
.get()
método toma 3 tipos de argumentos: el primero, el último y el medio. Internamente detecta si hay más argumentos que 2 y los usa (los del medio) como funciones de middleware, llamándolos de izquierda a derecha.La guía expressjs tiene una respuesta bastante clara a su pregunta, le recomiendo que lea eso, estoy publicando un breve fragmento de la guía, la guía es bastante buena.
Escribir middleware para usar en aplicaciones Express
Visión general
Las funciones de middleware son funciones que tienen acceso al objeto de solicitud ( req ), el objeto de respuesta ( res ) y la siguiente función en el ciclo de solicitud-respuesta de la aplicación. La siguiente función es una función en el enrutador Express que, cuando se invoca, ejecuta el middleware que sucede al middleware actual.
Las funciones de middleware pueden realizar las siguientes tareas:
Si la función de middleware actual no finaliza el ciclo de solicitud-respuesta, debe llamar a next () para pasar el control a la siguiente función de middleware. De lo contrario, la solicitud quedará pendiente.
Ejemplo
Aquí hay un ejemplo de una sencilla aplicación Express "Hello World". El resto de este artículo definirá y agregará dos funciones de middleware a la aplicación: una llamada myLogger que imprime un mensaje de registro simple y otra llamada requestTime 1 que muestra la marca de tiempo de la solicitud HTTP.
Función de middleware myLogger
Aquí hay un ejemplo simple de una función de middleware llamada "myLogger". Esta función simplemente imprime "LOGGED" cuando una solicitud a la aplicación pasa por ella. La función de middleware se asigna a una variable llamada myLogger.
Para cargar la función de middleware, llame a app.use () , especificando la función de middleware. Por ejemplo, el siguiente código carga la función de middleware myLogger antes de la ruta a la ruta raíz (/).
Cada vez que la aplicación recibe una solicitud, imprime el mensaje "LOGGED" en el terminal.
El orden de carga del middleware es importante: las funciones de middleware que se cargan primero también se ejecutan primero.
Si myLogger se carga después de la ruta a la ruta raíz, la solicitud nunca llega y la aplicación no imprime "LOGGED", porque el controlador de ruta de la ruta raíz finaliza el ciclo de solicitud-respuesta.
La función de middleware myLogger simplemente imprime un mensaje, luego pasa la solicitud a la siguiente función de middleware en la pila llamando a la función next () .
fuente
===== Explicación muy muy simple =====
Los middlewares a menudo se usan en el contexto del marco Express.js y son un concepto fundamental para node.js. En pocas palabras, es básicamente una función que tiene acceso a los objetos de solicitud y respuesta de su aplicación. La forma en que me gustaría pensarlo es una serie de 'controles / pre-pantallas' que atraviesa la solicitud antes de que la aplicación la maneje. Por ejemplo, Middlewares sería una buena opción para determinar si la solicitud se autentica antes de proceder a la aplicación y devolver la página de inicio de sesión si la solicitud no se autentica o para registrar cada solicitud. Hay muchos middlewares de terceros disponibles que permiten una variedad de funcionalidades.
Ejemplo de middleware simple:
El código anterior se ejecutará para cada solicitud que ingrese y registrará la URL de solicitud, el método next () esencialmente permite que el programa continúe. Si no se invoca la función next (), el programa no continuará más y se detendrá en la ejecución del middleware.
Un par de Middleware Gotchas:
fuente
next()
peroreturn next()
. ¿Cuál es la diferencia?next()
porque queremos que se llame al próximo middleware, no creonext()
oreturn next()
, ¡debería hacer alguna diferencia! Todavía depende de cuál sea el código ...Los middlewares son funciones ejecutadas en el medio después de que la entrada / fuente produce una salida que podría ser la salida final o podría ser utilizada por el siguiente middleware hasta que se complete el ciclo.
Es como un producto que pasa por una línea de ensamblaje donde se modifica a medida que avanza hasta que se completa, se evalúa o se rechaza.
Un middleware espera que funcione algún valor (es decir, valores de parámetros) y, en función de alguna lógica, el middleware llamará o no al siguiente middleware o enviará una respuesta al cliente.
Si aún no puede comprender el concepto de middleware, es similar a los patrones de Decorador o Cadena de comando.
fuente
El middleware es un subconjunto de funciones encadenadas llamadas por la capa de enrutamiento Express js antes de que se invoque el controlador definido por el usuario. Las funciones de middleware tienen acceso completo a los objetos de solicitud y respuesta y pueden modificar cualquiera de ellos.
La cadena de middleware siempre se llama en el orden exacto en que se ha definido, por lo que es vital que sepa exactamente qué está haciendo una pieza específica de middleware.
Una vez que finaliza una función de middleware, llama a la siguiente función de la cadena invocando su siguiente argumento como función.
Una vez que se ejecuta la cadena completa, se llama al manejador de solicitudes del usuario.
fuente
¡Mantén las cosas simples, hombre!
Nota: la respuesta está relacionada con los casos de middlware incorporado ExpressJS, sin embargo, existen diferentes definiciones y casos de uso de middlewares.
Desde mi punto de vista, el middleware actúa como funciones de utilidad o ayuda, pero su activación y uso es completamente opcional al usar el
app.use('path', /* define or use builtin middleware */)
que no quiere que escribamos un código para realizar tareas muy comunes que son necesarias para cada solicitud HTTP de nuestro cliente como procesar cookies, tokens CSRF y ..., que son muy comunes en la mayoría de las aplicaciones, por lo que el middleware puede ayudarnos a hacer todo esto para cada solicitud HTTP de nuestro cliente en alguna pila, secuencia u orden de operaciones y luego proporcionar el resultado del proceso como Una sola unidad de solicitud del cliente .Ejemplo:
Aceptar la solicitud de los clientes y proporcionarles respuestas de acuerdo con sus solicitudes es la naturaleza de la tecnología del servidor web.
Imagínese si estamos respondiendo simplemente "¡Hola, mundo!" El texto para una solicitud GET HTTP al URI raíz de nuestro servidor web es un escenario muy simple y no necesita nada más, sino que si estamos verificando al usuario actualmente conectado y luego respondemos con "¡Hola, Nombre de usuario!" necesita algo más de lo habitual en este caso, necesitamos un middleware para procesar todos los metadatos de la solicitud del cliente y proporcionarnos la información de identificación tomada de la solicitud del cliente, de acuerdo con esa información podemos identificar de manera única a nuestro usuario actual y es posible responder a él / ella con algunos datos relacionados.
¡Espero que ayude a alguien!
fuente
En términos muy básicos, si quiero explicarlo de esta manera, aprendo esto en el curso acelerado rápido del canal de YouTube de Traversymedia.
ok, por lo que middleware es una función que se ejecuta después de hacer una llamada a su ruta de esta manera.
Esta función de registro se ejecuta cada vez que actualiza su página, lo que significa que puede escribir cualquier cosa que necesite hacer después de que su página reciba una llamada API de operación, restablezca las cosas básicamente cualquier cosa. y coloque este middleware antes de que el orden de la función de ruta del middleware sea realmente importante o no funcione
fuente