El enrutamiento se refiere a cómo los endpoints (URIs) de una aplicación responden a las peticiones de los clientes.
El enrutamiento se refiere a la determinación de cómo una aplicación responde a una solicitud del cliente a un punto final 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 manejadoras, que se ejecutan cuando la ruta coincide.
La definición de la ruta tiene la siguiente estructura:
app.METHOD(PATH, HANDLER)
or
app.METHOD(path, callback )
Donde:
-
app
es una instancia deexpress
. -
METHOD
es un método de petición HTTP.METHOD es el método HTTP de la petición, como GET, PUT, POST, etc., en minúsculas. Así, los métodos reales sonapp.get()
app.post()
app.put()
, etc. -
PATH
es una ruta en el servidor. -
HANDLER
es la función callback que se ejecuta cuando la ruta y el método coinciden. De hecho, los métodos de enrutamiento pueden tener más de una función de devolución de llamada como argumentos. Con múltiples funciones de devolución de llamada, es importante proporcionarnext
como argumento a la función de devolución de llamada y luego llamar anext()
dentro del cuerpo de la función para entregar el control a la siguiente devolución de llamada.
app.get('/example/b', function (req, res, next) {
console.log('the response will be sent by the next function ...')
next()
}, function (req, res) {
res.send('Hello from B!')
})
Los siguientes ejemplos ilustran la definición de rutas simples.
Responde con Hello World!
en la página principal:
app.get('/', function (req, res) {
res.send('Hello World!')
})
Responde a la petición POST en la ruta raíz (/
), la página principal de la aplicación:
app.post('/', function (req, res) {
res.send('Got a POST request')
})
Responde a una petición PUT en la ruta /user
:
app.put('/user', function (req, res) {
res.send('Got a PUT request at /user')
})
Responde a una petición DELETE a la ruta /user
:
app.delete('/user', function (req, res) {
res.send('Got a DELETE request at /user')
})
Hay un método de enrutamiento especial, app.all()
, que se utiliza para cargar funciones de middleware en una ruta para todos los métodos de petición HTTP.
La siguiente devolución de llamada se ejecuta para las solicitudes a /secret
ya sea usando GET, POST, PUT, DELETE, o cualquier otro método de solicitud HTTP:
app.all('/secret', function (req, res, next) {
console.log('Accessing the secret section ...')
next() // pass control to the next handler
});
Más de una función de devolución de llamada puede manejar una ruta (asegúrese de especificar el objeto next
). Por ejemplo:
app.get('/example/b', function (req, res, next) {
console.log('the response will be sent by the next function ...')
next()
}, function (req, res) {
res.send('Hello from B!')
})
Las rutas, en combinación con un método de solicitud, definen los puntos finales en los que se pueden realizar las solicitudes. Las rutas pueden ser cadenas, patrones de cadenas o expresiones regulares.
Los caracteres ?
+
*
y ()
son subconjuntos de sus homólogos de expresiones regulares. El guión (-
) y el punto (.
) son interpretados literalmente por las rutas basadas en cadenas.
Si necesita utilizar el carácter dólar ($
) en una cadena de ruta, enciérrelo escapado dentro de ()
. Por ejemplo, la cadena de ruta para las solicitudes en «/data/$book
«, sería «/data/()book
«.
Aquí hay algunos ejemplos de rutas basadas en cadenas.
Esta ruta coincidirá con las peticiones a la ruta raíz, /
.
app.get('/', function (req, res) {
res.send('root')
})
Esta ruta coincidirá con las peticiones a /about
.
app.get('/about', function (req, res) {
res.send('about')
})
Esta ruta coincidirá con las peticiones a /random.text
.
app.get('/random.text', function (req, res) {
res.send('random.text')
})
Aquí tienes algunos ejemplos de rutas basadas en patrones de cadenas.
Esta ruta coincidirá con acd
y abcd
.
app.get('/ab?cd', function (req, res) {
res.send('ab?cd')
})
Esta ruta coincidirá con abcd
abbcd
abbbcd
, y así sucesivamente.
app.get('/ab+cd', function (req, res) {
res.send('ab+cd')
})
Esta ruta coincidirá con abcd
abxcd
abRANDOMcd
ab123cd
, etc.
app.get('/ab*cd', function (req, res) {
res.send('ab*cd')
})
Esta ruta coincidirá con /abe
y /abcde
.
app.get('/ab(cd)?e', function (req, res) {
res.send('ab(cd)?e')
})
Ejemplos de rutas basadas en expresiones regulares:
Esta ruta coincidirá con cualquier cosa que contenga una «a».
app.get(/a/, function (req, res) {
res.send('/a/')
})
Esta ruta coincidirá con butterfly
y , pero no con butterflyman
dragonflyman
, etc.
Controladores de ruta
Puedes proporcionar múltiples funciones de devolución de llamada que se comportan como middleware para manejar una solicitud. La única excepción es que estas devoluciones de llamada podrían invocar next('route')
para saltarse las restantes devoluciones de llamada de ruta. Puedes utilizar este mecanismo para imponer condiciones previas a una ruta, y luego pasar el control a las rutas subsiguientes si no hay razón para proceder con la ruta actual.
Los manejadores de ruta pueden ser
- en forma de función,
- una matriz de funciones, o
- combinaciones de ambas, como se muestra en los siguientes ejemplos.
Una sola función de devolución de llamada puede manejar una ruta. Por ejemplo:
app.get('/example/a', function (req, res) {
res.send('Hello from A!')
})
Más de una función de devolución de llamada puede manejar una ruta (asegúrese de especificar el objeto next
). Por ejemplo:
app.get('/example/b', function (req, res, next) {
console.log('the response will be sent by the next function ...')
next()
}, function (req, res) {
res.send('Hello from B!')
})
Un array de funciones callback puede manejar una ruta. Por ejemplo:
var cb0 = function (req, res, next) {
console.log('CB0')
next()
}var cb1 = function (req, res, next) {
console.log('CB1')
next()
}var cb2 = function (req, res) {
res.send('Hello from C!')
}app.get('/example/c', )
Una combinación de funciones independientes y arrays de funciones puede manejar una ruta. Por ejemplo:
var cb0 = function (req, res, next) {
console.log('CB0')
next()
}var cb1 = function (req, res, next) {
console.log('CB1')
next()
}app.get('/example/d', , function (req, res, next) {
console.log('the response will be sent by the next function ...')
next()
}, function (req, res) {
res.send('Hello from D!')
})
app.route()
Puedes crear manejadores de ruta encadenables para una ruta utilizando app.route()
. Debido a que la ruta se especifica en una sola ubicación, la creación de rutas modulares es útil, así como la reducción de la redundancia y los errores tipográficos. Para más información sobre las rutas, consulte: Documentación de Router().
Aquí hay un ejemplo de manejadores de ruta encadenados que se definen usando app.route()
.
app.route('/book')
.get(function (req, res) {
res.send('Get a random book')
})
.post(function (req, res) {
res.send('Add a book')
})
.put(function (req, res) {
res.send('Update the book')
})
0 comentarios