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

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

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

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

Para configurar su middleware, puede invocar app.use() para cada capa de middleware que desee agregar (puede ser genérico para todas las rutas o activado solo en rutas específicas que su servidor maneja), y se agregará a su stack de middleware Express . Las capas de middleware se pueden agregar una a una en múltiples invocaciones de use , o incluso todas a la vez en serie con una invocación. Consulte la documentación de use para más detalles.

Para dar un ejemplo de comprensión conceptual de Middleware Express, aquí está cómo se ve mi stack de middleware de aplicación (app.stack) cuando se registra el objeto de mi 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ía deducir, llamé a app.use(express.bodyParser()) , app.use(express.cookieParser()) , etc., que agregó estas “capas” de middleware express a la stack de middleware. Observe que las rutas están en blanco, lo que significa que cuando agregué esas capas de middleware especifiqué que se activan en cualquier ruta. Si agregué una capa de middleware personalizada que solo se activó en la ruta /user/:id , se reflejaría como una cadena en el campo de route de ese objeto de capa de middleware en la copia impresa de la stack anterior.

Esencialmente, cada capa agrega una función que maneja específicamente algo a su flujo a través del middleware.

Por ejemplo, al agregar bodyParser , se asegura de que su servidor maneje las solicitudes entrantes a través del middleware expreso . Por lo tanto, ahora analizar el cuerpo de las solicitudes entrantes es parte del procedimiento que lleva a cabo su middleware al manejar las solicitudes entrantes , todo porque llamó app.use(bodyParser) .

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

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

app.use () se utiliza para montar la función de middleware o para 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], callback, [callback]): podemos agregar una callback en la misma.

 app.use('/test', function(req, res, next) { // write your callback code here. }); 

app.use () funciona así:

  1. Solicitud de evento activado en la instancia del servidor http del nodo.
  2. Express hace parte de su manipulación interna con objeto req.
  3. Esto es cuando Express comienza a hacer cosas que especificaste con app.use

que muy simple.

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

app.use () actúa como un middleware en aplicaciones Express. A diferencia de app.get () y app.post () o algo así, en realidad puedes usar app.use () sin especificar la URL de solicitud. En tal caso, lo que hace es que se ejecuta cada vez que no importa en qué URL se ha afectado.

En express si importamos express desde “express” y usamos app = express (); entonces 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 proyecto express

Middleware es un término general para software que sirve para “pegar entre sí”, 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 puedes usar en tu aplicación Express, solo lee el documento: http://expressjs.com/en/guide/using-middleware.html

app.use aplica el middleware especificado a la stack de middleware de la aplicación principal. Al adjuntar middleware a la stack de aplicaciones principal, el orden de los archivos adjuntos es importante; si conecta el middleware A antes que el middleware B, el middleware A siempre se ejecutará primero. Puede especificar una ruta para la cual es aplicable un middleware 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() }) 

Enlace el middleware de nivel de aplicación a una instancia del objeto de aplicación mediante el uso de 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.