Saltar al contenido

Node.js / Express.js – ¿Cómo funciona app.router?

Hola usuario de nuestra página web, hallamos la solución a lo que buscas, desplázate y la encontrarás un poco más abajo.

Solución:

Nota: Esto describe cómo funcionaba Express en las versiones 2 y 3. Consulte el final de esta publicación para obtener información sobre Express 4.


static simplemente sirve archivos (static recursos) desde el disco. Le da una ruta (a veces llamada punto de montaje) y sirve los archivos en esa carpeta.

Por ejemplo, express.static('/var/www') serviría los archivos en esa carpeta. Entonces, una solicitud a su servidor Node para http://server/file.html serviría /var/www/file.html.

router es el código que ejecuta sus rutas. Cuando tu lo hagas app.get('/user', function(req, res) ... );, es el router que en realidad invoca la función de devolución de llamada para procesar la solicitud.

El orden al que le pasas las cosas app.use determina el orden en el que cada middleware tiene la oportunidad de procesar una solicitud. Por ejemplo, si tiene un archivo llamado test.html en tus static carpeta y una ruta:

app.get('/test.html', function(req, res) 
    res.send('Hello from route handler');
);

Cuál se envía a un cliente que solicita http://server/test.html? Cualquiera que sea el middleware que se le dé a use primero.

Si haces esto:

app.use(express.static(__dirname + '/public'));
app.use(app.router);

Entonces se sirve el archivo en el disco.

Si lo haces al revés,

app.use(app.router);
app.use(express.static(__dirname + '/public'));

Luego, el controlador de ruta recibe la solicitud y “Hola desde el controlador de ruta” se envía al navegador.

Por lo general, desea poner el enrutador encima los static middleware para que un archivo nombrado accidentalmente no pueda anular una de sus rutas.

Tenga en cuenta que si no lo hace explícitamente use los router, Express lo agrega implícitamente en el punto en que define una ruta (por lo que sus rutas aún funcionaron a pesar de que comentó app.use(app.router)).


Un comentarista ha planteado otro punto sobre el orden de static y router que no había abordado: el impacto en el rendimiento general de su aplicación.

Otra razón para userouter encima static es optimizar el rendimiento. Si pones static primero, luego presionará el disco duro en cada solicitud para ver si existe o no un archivo. En una prueba rápida, descubrí que esta sobrecarga ascendía a ~ 1 ms en un servidor descargado. (Es muy probable que ese número sea mayor bajo carga, donde las solicitudes competirán por el acceso al disco).

Con router En primer lugar, una solicitud que coincida con una ruta nunca tiene que llegar al disco, lo que ahorra valiosos milisegundos.

Por supuesto, hay formas de mitigar staticsobrecarga.

La mejor opción es poner todos sus static recursos en una carpeta específica. (ES DECIR /static) A continuación, puede montar static a esa ruta para que solo se ejecute cuando la ruta comience con /static:

app.use('/static', express.static(__dirname + '/static'));

En esta situación, pondrías esto arriba router. Esto evita procesar otro middleware / enrutador si hay un archivo presente, pero para ser honesto, dudo que gane tanto.

También podrías usar staticCache, que almacena en caché static recursos en la memoria para que no tenga que presionar el disco para los archivos solicitados comúnmente. (Advertencia:staticCache aparentemente se eliminará en el futuro).

Sin embargo, no creo staticCache almacena en caché las respuestas negativas (cuando un archivo no existe), por lo que no ayuda si ha puesto staticCache encima router sin montarlo en un camino.

Como ocurre con todas las preguntas sobre rendimiento, medir y comparar su aplicación del mundo real (bajo carga) para ver dónde están realmente los cuellos de botella.


Expreso 4

Express 4.0 eliminaapp.router. Todo el middleware (app.use) y rutas (app.get et al) ahora se procesan exactamente en el orden en que se agregan.

En otras palabras:

Todos los métodos de enrutamiento se agregarán en el orden en que aparecen. Debería no hacer app.use(app.router). Esto elimina el problema más común con Express.

En otras palabras, mezclar app.use() y app[VERB]() trabajará exactamente en el orden en que se llaman.

app.get('/', home);
app.use('/public', require('st')(process.cwd()));
app.get('/users', users.list);
app.post('/users', users.create);

Lea más sobre los cambios en Express 4.

Enrutamiento significa determinar cómo responde una aplicación a un solicitud de cliente a un punto final en particular, que es un URI (o ruta) y un método de solicitud HTTP específico (GET, POST, etc.). Cada ruta puede tener una o más funciones de controlador, que se ejecutan cuando la ruta coincide.

En Express 4.0 Router, tenemos más flexibilidad que nunca para definir nuestras rutas.

express.Router () se usa varias veces para definir grupos de rutas.

ruta utilizada como middleware para procesar solicitudes.

ruta usada como middleware para validar parámetros usando “.param ()”.

app.route () utilizado como acceso directo al enrutador para definir múltiples solicitudes en una ruta

cuando usamos app.route (), estamos adjuntando nuestra aplicación con ese enrutador.

var express = require('express'); //used as middleware
var app = express(); //instance of express.
app.use(app.router);
app.use(express.static(__dirname + '/public')); //All Static like [css,js,images] files are coming from public folder
app.set('views',__dirname + '/views'); //To set Views
app.set('view engine', 'ejs'); //sets View-Engine as ejs
app.engine('html', require('ejs').renderFile); //actually rendering HTML files through EJS. 
app.get('/', function (req, res) 
  res.render('index');  
)
app.get('/test', function (req, res) 
  res.send('test')
)

Acuérdate de que puedes glosar si diste con el arreglo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *