NodeJS/Express: ¿qué es "app.use"?

En la documentos para NodeJS express módulo, el código de ejemplo tiene app.use(...).

¿Qué es use función y dónde se define?

preguntado el 04 de julio de 12 a las 03:07

la documentación es un poco críptica para un principiante -

El posible duplicado anterior se hace referencia entre sí:

La documentación es completamente confusa -

@KansaiRobot ¡Soy un principiante y es bueno ver que alguien realmente piensa que no es sencillo! -

29 Respuestas

El objeto de la aplicación se crea una instancia en la creación del servidor Express. Tiene un middleware montón que se puede personalizar en app.configure()(esto ahora está en desuso en la versión 4.x).

Para configurar su middleware, puede invocar app.use(<specific_middleware_layer_here>) para cada capa de middleware que desee agregar (puede ser genérica para todas las rutas o activarse solo en rutas específicas que maneja su servidor), y se agregará a su Express pila de software intermedio. Las capas de middleware se pueden agregar una por una en múltiples invocaciones de use, o incluso todos a la vez en serie con una invocación. Ver use documentación para más información.

Para dar un ejemplo de comprensión conceptual de Express Middleware, así es como se ve la pila de middleware de mi aplicación (app.stack) cuando registro mi objeto de aplicación en la consola como JSON:

stack: 
   [ { route: '', handle: [Function] },
     { route: '', handle: [Function: static] },
     { route: '', handle: [Function: bodyParser] },
     { route: '', handle: [Function: cookieParser] },
     { route: '', handle: [Function: session] },
     { route: '', handle: [Function: methodOverride] },
     { route: '', handle: [Function] },
     { route: '', handle: [Function] } ]

Como podrá deducir, llamé app.use(express.bodyParser()), app.use(express.cookieParser()), etc., que agregaron estas 'capas' de middleware express a la pila de middleware. Observe que las rutas están en blanco, lo que significa que cuando agregué esas capas de middleware, especifiqué que se activaran en cualquier ruta. Si agregué una capa de middleware personalizada que solo se activó en la ruta /user/:id que se reflejaría como una cadena en el route campo de ese objeto de capa de middleware en la copia impresa de la pila anterior.

Cada capa esencialmente agrega una función que maneja algo específicamente para su flujo a través del middleware.

ej., añadiendo bodyParser, se asegura de que su servidor maneje las solicitudes entrantes a través del middleware express. Asi que, ahora analizar el cuerpo de las solicitudes entrantes es parte del procedimiento que realiza su middleware al manejar las solicitudes entrantes -- todo porque llamaste app.use(bodyParser).

Respondido 14 Feb 17, 00:02

gracias. ¿Sería tan difícil para la gente de Express explicar esto en sus documentos API? - ericoco

Entonces, está diciendo que cuando se recibe una solicitud, los datos pasan a través de esos analizadores antes de llegar al servicio real. Entonces, por ejemplo: Solicitud válida->Autenticación->Solicitud de procesos->Respuesta de servicio USO controlaría esos pasos en un orden específico y no los ejecutaría en paralelo? - adam hess

Entonces, ¿la inyección de dependencia app.use() está en acción? - Kevin C.

¿Cuándo se llama a la función que se envía a app.use? ¿Después de crear el servidor express o para cada solicitud? - Timo Huovinen

@KevinC. No, no es una inyección de dependencia. Es una arquitectura de complementos. En general, este tipo de arquitectura se denomina sistema de filtro/tubería de filtro/tubería y filtro. En Express la tubería es el next() devolución de llamada Se espera que cada middleware llame para pasar el procesamiento a la siguiente función en la canalización. El sistema de enrutamiento (el primer argumento para app.use()) permite que la canalización se bifurque según la URL: dormilón

Cada aplicación.uso (middleware) se llama cada vez que se envía una solicitud al servidor.

Respondido 24 Abr '17, 19:04

Su respuesta de una sola oración es instantáneamente comprensible y más útil que las otras explicaciones de varios párrafos. - apilado y desbordado

use es un método para configurar el middleware utilizado por las rutas del objeto del servidor Express HTTP. El método se define como parte de Contáctenos en el que se basa Express.

Noticias A partir de la versión 4.x, Express ya no depende de Contáctenos.

Las funciones de middleware que se incluían anteriormente con Express ahora se encuentran en módulos separados; ver el lista de funciones de middleware.

respondido 07 mar '19, 08:03

Y los documentos en línea están aquí: senchalabs.org/connect/proto.html#app.use - alexander pájaro

¿Sería eficiente si un middleware Node instancia objetos? ¿Significaría esto que en cada solicitud, ese middleware instancia nuevos objetos? ¿Se desechan los objetos viejos? Por ejemplo app.use(function(){ var object = new SomeConstructor; next(); }) - CMCDragonkai

@CMCDragonkai Está bien instanciar objetos en cada solicitud. Obtendrán basura recolectada siempre que no almacene referencias a los objetos fuera del alcance de su controlador de solicitudes. - Jeff McMahan

@AlexanderBird gracias por los enlaces (aunque ahora el primero está roto). Para que conste, solo el comienzo del documento en el segundo enlace dice "Utilice el identificador de middleware dado para la ruta dada, por defecto a /. Esta "ruta" es el punto de montaje para el middleware, cuando se le da un valor que no sea / el middleware solo es efectivo cuando ese segmento está presente en el nombre de ruta de la solicitud. Por ejemplo, si tuviéramos que montar una función en /admin, se invocaría en /admin y /admin/settings, sin embargo, no se invocaría para / , o /publicaciones". Sencillo :) - adrien ser

aplicación.uso() actúa como un middleware en aplicaciones express. a diferencia de aplicación.get() y aplicación.post() más o menos, en realidad puedes usar aplicación.uso() sin especificar la URL de solicitud. En tal caso, lo que hace es que se ejecuta cada vez sin importar la URL que se haya accedido.

contestado el 24 de mayo de 18 a las 13:05

app.use() utilizado para montar la función de middleware o montar en una ruta específica, la función de middleware se ejecuta cuando la ruta base coincide.

Por ejemplo: si está utilizando app.use() en indexRouter.js , así:

//indexRouter.js

var adsRouter = require('./adsRouter.js');

module.exports = function(app) {
    app.use('/ads', adsRouter);
}

En el código anterior app.use() monte la ruta en '/ads' a adsRouter.js.

Ahora en adsRouter.js

// adsRouter.js

var router = require('express').Router();
var controllerIndex = require('../controller/index');
router.post('/show', controllerIndex.ads.showAd);
module.exports = router;

en adsRouter.js, la ruta será así para ads- '/ads/show', y luego funcionará de acuerdo con controllerIndex.ads.showAd().

app.use([ruta],devolución de llamada,[devolución de llamada]) : podemos agregar una devolución de llamada en el mismo.

app.use('/test', function(req, res, next) {

  // write your callback code here.

    });

Respondido el 23 de enero de 17 a las 07:01

Usaría "mapa" en lugar de "montar", más fácil de entender. - jeb50

app.use(function middleware1(req, res, next){
   // middleware1 logic
}, function middleware2(req, res, next){
   // middleware2 logic
}, ... middlewareN);

app.uso es una forma de registrarse middleware o cadena de middlewares (o varios middlewares) antes de ejecutar cualquier lógica de ruta final o lógica de ruta intermedia según el orden de la secuencia de registro del middleware.

Programa intermedio: forma cadena de funciones/funciones de middleware con 3 parámetros req, res y siguiente. next es la devolución de llamada que se refiere a la siguiente función de middleware en la cadena y, en el caso de la última función de middleware de la cadena, next apunta a la primera función de middleware de la siguiente cadena intermedia registrada.

Respondido 25 Feb 21, 18:02

app.use() maneja todas las funciones de middleware.
¿Qué es el software intermedio?
Los middlewares son las funciones que funcionan como una puerta entre dos todas las rutas.

Por ejemplo:

app.use((req, res, next) => {
    console.log("middleware ran");
    next();
});

app.get("/", (req, res) => {
    console.log("Home route");
});

Cuando visites / ruta en su consola se imprimirán los dos mensajes. El primer mensaje será de la función de middleware. Si no hay next() función pasada, solo se ejecuta la función de middleware y se bloquean otras rutas.

respondido 21 nov., 20:08

De la opinión: ¿Realmente necesitamos otra respuesta en este hilo? - sɐunıɔ ןɐ qɐp

app.use() funciona así:

  1. Evento de solicitud desencadenado en la instancia del servidor http del nodo.
  2. express realiza parte de su manipulación interna con el objeto req.
  3. Aquí es cuando express comienza a hacer las cosas que especificó con app.use

que muy sencillo.

Y solo entonces Express hará el resto de las cosas como el enrutamiento.

Respondido 17 Jul 17, 09:07

En express si importamos express desde "express" y usamos app = express(); luego la aplicación tiene toda la funcionalidad de express

si usamos app.use()

con cualquier función de módulo/middleware para usar en todo el proyecto express

Respondido el 10 de Septiembre de 17 a las 15:09

app.uso funciona como middleware para solicitud de aplicación. sintaxis

app.use('pass request format',function which contain request response onject)

ejemplo

app.use('/',funtion(req,res){
 console.log(all request pass through it);
// here u can check your authentication and other activities.
})

también puede usarlo en caso de enrutar su solicitud.

app.use('/', roting_object);

Respondido el 23 de enero de 19 a las 15:01

El método .use() en express es un controlador de *middleware. Una aplicación Express es esencialmente una serie de llamadas a funciones de middleware.

Una aplicación Express puede usar 5 tipos diferentes de middleware, de los cuales estos dos son los más utilizados:

  1. Middleware a nivel de aplicación
  2. Middleware a nivel de enrutador

App.use() se usa para vincular *middleware de nivel de aplicación a una instancia del objeto de la aplicación que se instancia en la creación del servidor Express (router.use() para middleware de nivel de enrutador).

Sintaxis: app.use(path, middleware function/s)

Aquí, la ruta es opcional. Cuando no se especifica una ruta, la función se ejecuta cada vez que la aplicación recibe una solicitud, independientemente de la URL que se haya accedido.

*Ejemplo:
Middleware de autenticación: en una aplicación To-Do, una vez que un usuario ya creado inicia sesión, se le proporciona un token JWT, que debe verificarse cada vez que el usuario realiza una solicitud GET, PUT, PATCH, POST o DELETE.

app.use("/api/*", verifyToken(req, res, next): void {
const jwt: string = req.headers['x-token-header'];
if (!jwt) {
  res.status(403).send({ message: 'No token provided!' });
} else {
  jsonwebtoken.verify(jwt, config.get('secretString'), (err) => {
    if (err) {
      res.status(403).send(err);
    } else {
      next();
    }
  });
});

Aquí, se agregó la ruta /api para diferenciar las solicitudes que no necesitan una autenticación JWT, como registrarse e iniciar sesión (ya que no queremos que el middleware se ejecute cuando no hay necesidad de autenticación).

*Las funciones de middleware son funciones que tienen acceso al objeto de solicitud (req), el objeto de respuesta (res) y la siguiente función de middleware en el ciclo de solicitud-respuesta de la aplicación. La siguiente función de middleware se indica comúnmente mediante una variable llamada next.

Sintaxis de un middleware: function(req, res, next)

contestado el 03 de mayo de 21 a las 08:05

Esta explicación responde con mayor precisión a la pregunta. - HCChen

Entonces, para la página de inicio de sesión o registro, ¿no podemos usar la ruta de acceso "/api/login" "/api/signup"? - Akin Zeman

app.use es una función que requiere middleware. Por ejemplo:

 app.use('/user/:id', function (req, res, next) {
       console.log('Request Type:', req.method);
        next();
     });

Este ejemplo muestra la función de middleware instalada en el /user/:id sendero. Esta función se ejecuta para cualquier tipo de solicitud HTTP en el /user/:id camino.

Es similar al servidor web REST, solo use diferentes /xx para representar diferentes acciones.

Respondido 27 Oct 18, 20:10

gracias por la respuesta, pero como alguien más ya dijo toda esa información, no votaré esta. No creo que necesite todas las explicaciones de lo que expresa use puede hacer; Solo necesitaba saber de qué se trataba (y cualquier conocimiento del contexto para saber cómo investigar más yo mismo). - alexander pájaro

app.use() es un método que nos permite registrar un middleware.

El método de middleware es como un interceptor en Java, este método siempre se ejecuta para todas las solicitudes.

Propósito y uso del middleware:-

  1. Para comprobar si la sesión expiró o no
  2. para la autenticación y autorización del usuario
  3. comprobar si hay cookies (fecha de caducidad)
  4. analizar datos antes de la respuesta

Respondido 22 Feb 21, 00:02

El middleware es la función que se pasa a app.use(). - nCardot

Middleware es un término general para el software que sirve para "pegarse", por lo que app.use es un método para configurar el middleware, por ejemplo: para analizar y manejar el cuerpo de la solicitud: app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json()); hay muchos middlewares que puede usar en su aplicación express, solo lea el documento: http://expressjs.com/en/guide/using-middleware.html

respondido 26 nov., 17:18

app.use aplica el middleware especificado a la pila de middleware de la aplicación principal. Al adjuntar middleware a la pila de aplicaciones principal, el orden de los archivos adjuntos es importante; si adjunta el middleware A antes que el middleware B, el middleware A siempre se ejecutará primero. Puede especificar una ruta para la que se aplica un middleware en particular. En el siguiente ejemplo, "hola mundo" siempre se registrará antes de "felices fiestas".

const express = require('express')
const app = express()

app.use(function(req, res, next) {
  console.log('hello world')
  next()
})

app.use(function(req, res, next) {
  console.log('happy holidays')
  next()
})

contestado el 23 de mayo de 18 a las 12:05

Le permite utilizar cualquier middleware (LEER MÁS) me gusta body_parser,CORS etc. El middleware puede hacer cambios en request y response objetos. También puede ejecutar una pieza de código.

Respondido el 05 de diciembre de 18 a las 11:12

Gracias por la respuesta, pero creo que toda esa información ya está capturada en otras respuestas: alexander pájaro

También puede crear su propia función de middleware como

app.use( function(req, res, next) {
  // your code 
  next();
})

Contiene tres parámetros. req, res, next
También puede usarlo para la autenticación y validación de parámetros de entrada para mantener limpio su controlador.

next() se utiliza para ir al siguiente middleware o ruta.
Puede enviar la respuesta desde el middleware

Respondido 20 Feb 19, 09:02

app.use es un middleware de nivel de aplicación

Vincule el middleware de nivel de aplicación a una instancia del objeto de la aplicación mediante las funciones app.use() y app.METHOD(), donde METHOD es el método HTTP de la solicitud que maneja la función de middleware (como GET, PUT o POST) en minúsculas.

puede usar para verificar todas las solicitudes, por ejemplo, desea verificar el token/token de acceso que necesita para escribir un middleware usando app.use para verificar el token en la solicitud.

Este ejemplo muestra una función de middleware sin ruta de montaje. La función se ejecuta cada vez que la aplicación recibe una solicitud.

var app = express()

app.use(function (req, res, next) {
  console.log('Time:', Date.now())
  next()
})

referencia de https://expressjs.com/en/guide/using-middleware.html

Respondido 09 Jul 19, 08:07

app.use() no es un middleware. El middleware es la función que se pasa a app.use() - nCardot

app.use(ruta, middleware) se utiliza para llamar a la función de middleware que debe llamarse antes de que se alcance la ruta para la ruta correspondiente. Se pueden invocar múltiples funciones de middleware a través de app.use.

app.use('/fetch', enforceAuthentication) -> enforceAuthentication middleware fn se llamará cuando una solicitud comenzando con '/ buscar' Esta recibido. Puede ser /buscar/usuarios, /buscar/ids/{id}, Etc.

Es posible que haya que llamar a algunas funciones de middleware independientemente de la solicitud. Para tales casos, no se especifica una ruta y dado que la ruta predeterminada es / y cada solicitud comienza con /, esta función de middleware se llamará para todas las solicitudes.

app.use(() => { // Inicializar un servicio común })

siguiente() fn debe llamarse dentro de cada función de middleware cuando se pasan múltiples funciones de middleware a app.uso, de lo contrario, no se llamará a la siguiente función de middleware.

referencia: http://expressjs.com/en/api.html#app.use

Nota: La documentación dice que podemos omitir las funciones de middleware siguiendo la actual llamando siguiente('ruta') dentro de la función de middleware actual, pero esta técnica no funcionó para mí dentro de app.use pero funcionó con app.METHOD como abajo. Entonces, fn1 y fn2 fueron llamados pero no fn3.

app.get('/fetch', function fn1(req, res, next)  {
    console.log("First middleware function called"); 
        next();
    }, 
    function fn2(req, res, next) {
        console.log("Second middleware function called"); 
        next("route");
    }, 
    function fn3(req, res, next) {
        console.log("Third middleware function will not be called"); 
        next();
    })

Respondido el 17 de junio de 20 a las 00:06

Vincule el middleware de nivel de aplicación a una instancia del objeto de la aplicación mediante las funciones app.use() y app.METHOD(), donde METHOD es el método HTTP de la solicitud que maneja la función de middleware (como GET, PUT o POST) en minúsculas.

Respondido 23 ago 17, 12:08

En resumen, app.use() admite todo tipo de solicitudes [por ejemplo: obtener, publicar,...] por lo que se usa principalmente para configurar middelware. o puede usarse para cuando las rutas y funciones se separan

ejemplo:

app.use("/test",functionName)

y functionName se encuentra en un archivo diferente

respondido 27 nov., 18:19

Gracias por la respuesta, pero creo que toda esa información ya está capturada en otras respuestas. - alexander pájaro

app.uso
es creado por express (marco de middleware de nodejs)
app.use se usa para ejecutar cualquier consulta específica en el proceso de inicialización
servidor.js(nodo)
var app = require('expreso');
app.use(bodyparser.json())
así que básicamente la función app.use se llama cada vez que servidor activo

respondido 21 mar '20, 18:03

Puedes usar app.use('/apis/test', () => {...}) para escribir middleware para su API, para manejar una o algunas acciones (autenticación, datos de validación, tokens de validación, etc.) antes de que pueda continuar o responder con un código de estado específico cuando la condición que proporcionó no fue calificada.

Ejemplo:

var express = require('express')
var app = express()

app.use(function (req, res, next) {
  // Your code to handle data here
  next()
})

Más detalles son, esta parte en realidad es una función anónima para que escriba la lógica en tiempo de ejecución

function (req, res, next) {
   // Your code to handle data here
   next()
}

Puede dividirlo en otra función de otro archivo y usar module.export que se utilizará

next() aquí para la lógica de que si maneja todo está bien, entonces puede usar entonces para que el programa continúe con la lógica que solía tener.

Respondido 02 Jul 20, 04:07

La función app.use() se usa para montar las funciones de middleware especificadas en la ruta que se especifica. Se utiliza principalmente para configurar middleware para su aplicación.
Sintaxis
app.use(path, callback)
parámetros:

  1. path: Es la ruta por la que se llama a la función de middleware. Puede ser una cadena que represente una ruta o un patrón de ruta o un patrón de expresión regular para que coincida con las rutas.
  2. callback: Es una función de middleware o una serie/matriz de funciones de middleware.

Respondido el 20 de junio de 21 a las 11:06

En palabras simples app.use() es una función que toma otra función (devolución de llamada) como parámetro y se ejecuta cada vez que se envía la solicitud a la aplicación/servidor express.

La función que se pasa dentro de app.use también se llama middleware, middleware es solo un nombre elegante para una función que existe en la aplicación Express y tiene tres parámetros: solicitud, respuesta y siguiente. Puedes leer más sobre middleware.

El middleware se llama entre la solicitud y el ciclo de respuesta. Si desea que se aplique un middleware en todas las rutas, puede usar app.use() o hacer alguna validación, comprobación de errores y otras cosas.

Respondido el 23 de junio de 21 a las 09:06

app.use() se llamará para cada solicitud: GET, POST, PUT, PATCH, DELETE

Respondido el 26 de Septiembre de 21 a las 00:09

Como sugiere el nombre, actúa como un middleware en su enrutamiento.

Digamos que para una sola ruta, desea llamar a varias direcciones URL o realizar varias funciones internamente antes de enviar la respuesta. puede usar este middleware y pasar su ruta y realizar todas las operaciones internas.

syntax:
app.use( function(req, res, next) {
  // code
 next();
})

siguiente es opcional, puede usar para pasar el resultado usando este parámetro a la siguiente función.

Respondido el 24 de junio de 20 a las 14:06

app.use() es el middleware de la aplicación. Vincule el middleware de nivel de aplicación a una instancia del objeto de la aplicación mediante el uso de la aplicación. uso() y aplicación. Funciones METHOD(), donde METHOD es el método HTTP de la solicitud que maneja la función de middleware (como GET, PUT o POST)

var express = require('express');
var app = express();
var PORT = 3000;

// This middleware will not allow the
// request to go beyond it
app.use(function (req, res, next) {
    console.log("Middleware called")
    next();
});
    
// Requests will never reach this route
app.get('/user', function (req, res) {
    console.log("/user request called");
    res.send('Hello test');
});

app.listen(PORT, function(err){
    if (err) console.log(err);
    console.log("Server listening on PORT", PORT);
});

Respondido el 04 de diciembre de 21 a las 03:12

Digamos que tenemos un conjunto de rutas que nuestro sitio puede manejar

app.get('/1/', function(req, res) {
    res.send('page1');
});

app.get('/2/', function(req, res) {
    res.send('page2');
});

Obviamente, si se solicita una dirección que no procesamos, entonces se debe devolver un error 404. Express, sin embargo, no hace esto por defecto. Pero es fácil de implementar.

El método especial app.use nos ayudará con esto. Le permite interceptar todas las direcciones sin procesar

Usemos este método para devolver un error 404

app.use(function(req, res) {
    res.status(404).send('not found');
});

Ahora coloquemos nuestra construcción después de todo. app.get

app.get('/1/', function(req, res) {
    res.send('page1');
});

app.get('/2/', function(req, res) {
    res.send('page2');
});

app.use(function(req, res) {
    res.status(404).send('not found');
});

Respondido 19 Feb 22, 21:02

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.