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


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

¿Qué es la función use y dónde está definida?

Author: nbro, 2012-07-04

10 answers

El objeto app se instanciará al crear el servidor Express. Tiene un middleware pila que se puede personalizar en app.configure()(esto ahora está obsoleto 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 activada solo en rutas específicas que maneja su servidor), y se agregará a su pila de middleware Express. Middleware las capas se pueden agregar una por una en múltiples invocaciones de use, o incluso todas a la vez en serie con una invocación. Véase use documentación para más detalles.

Para dar un ejemplo para la comprensión conceptual del Middleware Express, aquí está lo que mi pila de middleware app (app.pila) se parece al registrar 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 usted podría ser capaz de deducir, llamé app.use(express.bodyParser()), app.use(express.cookieParser()), etc, que añadió 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, especificé que se activarían en cualquier ruta. Si agrego una capa de middleware personalizada que solo se activa en la ruta /user/:id que se reflejaría como una cadena en el campo route de ese objeto de capa de middleware en la impresión de pila anterior.

Cada capa es esencialmente la adición de una función que maneja específicamente algo a su flujo a través de la middleware.

Por ejemplo, añadiendo bodyParser, se asegura de que su servidor maneje las solicitudes entrantes a través del middleware express . Entonces, ahora analizar el cuerpo de las solicitudes entrantes es parte del procedimiento que su middleware toma al manejar las solicitudes entrantes all todo porque llamó a app.use(bodyParser).

 263
Author: chinnychinchin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-14 00:00:25

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

 38
Author: JohnnyHK,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-03 03:25:06

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

 17
Author: Eugene Mercer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-24 18:37:43

App.use () se utiliza para montar la función middleware o montar en una ruta de acceso especificada,la función middleware se ejecuta cuando la ruta de acceso base coincide.

Por ejemplo: si está utilizando la aplicación.use () en indexRouter.js, así:

//indexRouter.js

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

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

En la aplicación de código anterior.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, el camino será así para ads - '/ ads / show', y luego funcionará de acuerdo a controllerIndex.ADS.showAd ().

App.use ([path], callback, [callback]): podemos agregar una devolución de llamada en el mismo.

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

  // write your callback code here.

    });
 14
Author: Shubham Verma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-23 07:51:22

App.use () funciona así:

  1. Evento de solicitud trigered en instancia de servidor http de nodo.
  2. express hace algo de su manipulación interna con el objeto req.
  3. Esto es cuando express comienza a hacer las cosas que especificó con la aplicación.use

Que muy simple.

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

 4
Author: Anton Stafeyev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-17 08:58:32

App.use () actúa como un middleware en express apps. A diferencia de app.get () y app.post () más o menos, en realidad se puede utilizar aplicación.use () sin especificar la URL de la solicitud. En tal caso lo que hace es, se ejecuta cada vez sin importar qué URL ha sido golpeada.

 4
Author: Omkar Mote,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-24 12:23:59

En expreso si importar express desde " express" y usar app = express(); a continuación, aplicación que tiene todas las funcionalidades de express

Si usamos app.use ()

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

 1
Author: saurabh kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-10 14:07:29

Middleware es un término general para software que sirve para" pegar " de manera 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 utilizar en su aplicación express solo lee el documento : http://expressjs.com/en/guide/using-middleware.html

 1
Author: user3432221,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-26 18:53:59

App.use aplica el middleware especificado a la pila principal de middleware de la aplicación. Al adjuntar middleware a la pila de aplicaciones principal, el orden de los adjuntos importa; si adjunta middleware A antes del middleware B, el middleware A siempre se ejecutará primero. Puede especificar una ruta para la que sea aplicable un middleware en particular. En el siguiente ejemplo, "hello world" siempre se registrará antes de "happy holidays"."

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()
})
 1
Author: Rubin bhandari,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-23 11:42:48

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

 0
Author: Rajeev Kumar Verma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-23 11:52:17