Estoy empezando con NodeJS y Express 4, y estoy un poco confundido. He estado leyendo el sitio web de Express, pero no puedo ver cuándo usar un controlador de ruta o cuándo usarlo express.Router
.
Como pude ver, si quiero mostrar una página o algo cuando el usuario golpea, /show
por ejemplo, debería usar:
var express = require('express')
var app = express()
app.get("/show", someFunction)
Al principio, pensé que esto era viejo (para Express 3). ¿Es correcto o este también es el camino para Express 4?
Si esta es la forma de hacerlo en Express 4, ¿ express.Router
para qué se utiliza?
Leí casi el mismo ejemplo que el anterior pero usando express.Router
:
var express = require('express');
var router = express.Router();
router.get("/show", someFunction)
Entonces, ¿cuál es la diferencia entre ambos ejemplos?
¿Cuál debo usar si solo quiero hacer un sitio web de prueba simple?
Router
no acepta.listen()
solicitudes por sí solo. Es útil para separar su aplicación en múltiples módulos, creando unoRouter
en cada uno queapp
puedarequire()
y.use()
como middleware.app.get(..)
sintaxis es solo un atajo para que trabajar seaexpress.router
más conveniente. Si recién comienza, no se preocupe por los detalles del enrutador.app's
propios métodos de enrutamiento, como por ejemploapp.get()
, son suficientes para sus necesidades, úselos. ElRouter
está ahí sólo por conveniencia para ayudar a organizar la aplicación a través de múltiples módulos. De la guía : " Laexpress.Router
clase se puede utilizar para crear controladores de ruta montables modulares. UnaRouter
instancia es un middleware completo y un sistema de enrutamiento; por esta razón, a menudo se lo conoce como una" mini aplicación " "Respuestas:
app.js
perros.js
Cuando
var app = express()
se llama, se devuelve un objeto de aplicación. Piense en esto como la aplicación principal .Cuando
var router = express.Router()
se llama, se devuelve una mini aplicación ligeramente diferente . La idea detrás de la mini aplicación es que cada ruta en su aplicación puede volverse bastante complicada, y usted se beneficiaría de mover todo ese código en un archivo separado. El enrutador de cada archivo se convierte en una mini aplicación , que tiene una estructura muy similar a la aplicación principal .En el ejemplo anterior, el código para la ruta / dogs se ha movido a su propio archivo para que no abarrote la aplicación principal . El código para / cats y / birds se estructuraría de manera similar en sus propios archivos. Al separar este código en tres mini aplicaciones , puede trabajar en la lógica de cada una de forma aislada y no preocuparse por cómo afectará a las otras dos.
Si tiene un código (middleware) que pertenece a las tres rutas, puede ponerlo en la aplicación principal , antes de las
app.use(...)
llamadas. Si tiene un código (middleware) que pertenece solo a una de esas rutas, puede colocarlo en el archivo solo para esa ruta.fuente
app.use('/dogs', dogs)(app)
ya que está definiendo rutas allí, además (y corríjame si estoy equivocado) si lo hace de esta manera, el objeto de la aplicación tiene todo el middleware previamente colocado en él y se agregará middleware adicional al objeto de la aplicación (suponiendo que haya más middleware en la ruta de los perros). si lo usaroute.get('/dogs', route)
, solo pasa el middleware al objeto de la aplicación cuando interactúa con las rutas definidas en ese enrutador y si el alcance de la aplicación está fuera de la ruta, no tiene acceso a ese middleware.app.use('/dogs', show)
. De esta manera, la ruta es independiente de la aplicación y se puede reutilizar en cualquier aplicación Express. Middleware colocado en cualquier lugar antes de que una ruta sea utilizada por esa ruta. Si coloca middleware sobre todas las rutas en app.js, entonces todas las rutas usarán ese middleware. Si coloca middleware dentro de un archivo de ruta (dogs.js), solo esa ruta lo usará. Si coloca middleware después de la ruta GET dentro de dogs.js, solo la ruta POST lo usará (siempre que termine con una respuesta).app.get('/dogs'dogs,)(app)
Quise decir ya que la pregunta era sobre la función get de app.get y route.get. estabas mostrando cómo separar las rutas para hacerlas manejables. ¿Pero no sería correcta mi anécdota si estamos hablandoapp.get
? Si puedo acceder a una PC, editaré mi comentario anterior.Router
no lo hace.listen()
para solicitudes por sí mismo". Esa podría ser la principal diferencia.Express 4.0 viene con el nuevo enrutador. Como se menciona en el sitio:
Hay un buen artículo en https://scotch.io/tutorials/learn-to-use-the-new-router-in-expressjs-4 que describe las diferencias y lo que se puede hacer con los enrutadores.
Para resumir
Con los enrutadores puede modularizar su código más fácilmente. Puede usar enrutadores como:
Nota:
El
app.router
objeto, que fue eliminado en Express 4, ha regresado en Express 5. En la nueva versión, es solo una referencia al enrutador Express base, a diferencia de Express 3, donde una aplicación tuvo que cargarlo explícitamente.fuente
Como en el ejemplo anterior, podemos agregar diferentes métodos de solicitud HTTP en una ruta.
fuente
Digamos que su aplicación es poco compleja. Entonces, lo que hacemos primero es dividir la aplicación en múltiples módulos para que los cambios en un módulo no abarroten a los demás y pueda seguir trabajando en módulos individuales, pero al final del día necesita integrar todo en uno ya que están creando una sola aplicación. Es como si tuviéramos una aplicación principal y pocas aplicaciones secundarias cuyo padre es la aplicación principal. Entonces, cuando creamos la aplicación principal, creamos una usando
Y para esta solicitud principal necesitamos traer las solicitudes secundarias. Pero dado que las aplicaciones secundarias no son aplicaciones totalmente diferentes (ya que se ejecutan en el mismo término contexto-java), express proporciona la forma de hacerlo mediante la función del enrutador Expresse y esto es lo que hacemos en cada archivo de módulo secundario y llamemos a uno de esos módulos secundarios como aboutme .
Por module.exports estamos haciendo que este módulo esté disponible para que otros lo consuman y dado que hemos modularizado las cosas, necesitamos que los archivos del módulo estén disponibles para la aplicación principal mediante la función require del nodo, al igual que cualquier otro módulo de terceros y el archivo principal se ve algo como esto.
después de que este módulo secundario esté disponible para los padres, debemos informarle a la aplicación principal cuándo usar esta aplicación secundaria. Digamos que cuando un usuario encuentra el camino sobre mí, necesitamos la aplicación secundaria sobre mí para manejar la solicitud y lo hacemos utilizando el método de uso de Expresse .
y de una sola vez el archivo padre se ve así
Sobre todo, lo que el padre puede hacer es iniciar un servidor donde el hijo no puede. Espero que esto aclare. Para obtener más información, siempre puede consultar el código fuente, que lleva algo de tiempo, pero le brinda mucha información. Gracias.
fuente
parent.use('/aboutme', child)
?El uso de app.js para escribir rutas significa que son accesibles para todos los usuarios a medida que app.js se carga al iniciar la aplicación. Sin embargo, poner rutas en las mini aplicaciones express.router () protege y restringe su accesibilidad.
fuente
express.Router
tiene muchas opciones:/show
ruta no será la misma que/Show
, este comportamiento está deshabilitado de forma predeterminada/show/
ruta no es la misma que/show
, este comportamiento también está deshabilitado de forma predeterminadafuente
En una palabra,
express.Router
puede hacer más cosas en comparación conapp.get()
, como middleware, además, puede definir un objeto de enrutador más conexpress.Router()
fuente