En los documentos Express , dice:
El middleware de nivel de aplicación está vinculado a una instancia de express, utilizando app.use() y app.VERB().
El middleware de nivel de enrutador funciona igual que el middleware de nivel de aplicación, excepto que están vinculados a una instancia de
express.Router(). El sistema de middleware creado en el nivel de la aplicación en el ejemplo anterior se puede replicar en el nivel del enrutador usando el siguiente código.
En la aplicación proporcionada por el generador Express, veo en el app.js principal, hay:
var routes = require('./routes/index'); app.use('/', routes); Y en ./routes/index.js , veo esto:
var express = require('express'); var router = express.Router(); /* GET home page. */ router.get('/', function(req, res, next) { res.render('index', { title: 'Express' }); }); module.exports = router; ¿Cuál es el propósito de app.use pasándolo a router.get en lugar de simplemente usar app.get ? Y, en general, ¿cuál es la diferencia entre app.VERB y router.VERB en términos de enrutamiento?
¿Cuál es el propósito de app.use pasándolo a router.get en lugar de simplemente usar app.get?
Todo esto es solo diseño para la modularidad. Permite que una aplicación se divida en varias piezas más pequeñas acopladas libremente y, dado que todas no tienen ningún conocimiento directo de la instancia de app compartida que las combina, se logra la modularidad.
Por ejemplo, podría crear un subsistema de cuenta de usuario completo que maneje el registro, el inicio de sesión, la contraseña olvidada, etc., y compartirlo entre varias aplicaciones diferentes al "montarlo" dentro de ellas a través app.use(require("my-user-system")) .
Ese es el único propósito detrás de esto. De lo contrario, no hay diferencia funcional, técnica o de rendimiento.
Y, en general, ¿cuál es la diferencia entre app.VERB y router.VERB en términos de enrutamiento?
Ninguna diferencia. La aplicación tiene su propio enrutador principal/principal y app.VERB es solo azúcar de conveniencia para el equivalente de app.router.VERB .
Un ejemplo ayudará aquí:
En los pájaros.js:
// birds.js var express = require('express'); var router = express.Router(); // middleware that is specific to this router router.use(function timeLog(req, res, next) { console.log('Time: ', Date.now()); next(); }); // define the home page route router.get('/', function (req, res) { res.send('Birds home page'); });En la aplicación.js:
// app.js const express = require('express') const app = express() var birds = require('./birds'); app.use('/birds', birds); app.listen(3000, () => console.log('app listening on port 3000!\naccess http://localhost:3000/birds/'))Ahora las solicitudes a http://localhost:3000/birds/ irán al archivo birds.js.
Este enfoque modular facilitará el mantenimiento de una gran base de código, a medida que la aplicación crezca.
La aplicación tiene el método listen y algún otro que no tiene el router.
La aplicación "hace" lo principal, mientras que la ruta solo agrupa algunas rutas, proporciona encapsulación (vea la respuesta de Manohar con el ejemplo).
Las rutas en el enrutador no necesariamente saben de antemano cuál será su ruta completa. Vea en el ejemplo que '/birds' está definido en app.js, que es la raíz del enrutador en birds.js... la diferencia entre app.VERB y rourer.VERB está en el contexto.