¿Cómo usar el enrutador de ExpressJS?

El Enrutador determina cómo la aplicación responde a una petición de un cliente. Cada ruta puede tener una o más funciones, que se ejecutan cuando la ruta coincide. La definición de ruta toma la siguiente estructura:

app.METHOD(PATH, HANDLER)

Dónde:

  • app es una instancia de express.
  • METHOD es un método HTTP, en minúsculas.
  • PATH es una ruta en el servidor. Pueden ser cadenas, patrones de cadenas o expresiones regulares. Los caracteres ?, +, * y () son subconjuntos de sus equivalentes de expresiones regulares. El guión (-) y el punto (.) se interpretan literalmente.
  • HANDLER es la función que se ejecuta cuando la ruta coincide.

Posts relacionados:

Ejemplos básicos

Responde con «Hola mundo» cuando se llama a la página de inicio (/)

app.get('/', (req, res) => {   res.send('Hola mundo!') })

Responde con «Esta es un petición POST» cuando se llama a la página de inicio (/)

app.post('/', (req, res) => {   res.send('Esta es un petición POST') })

Responde con «Una petición PUT que casa con la ruta /user»

app.put('/user', (req, res) => {   res.send('Una petición PUT que casa con la ruta /user') })

Responde con «Una petición DELETE que casa con la ruta /user»

app.delete('/user', (req, res) => {   res.send('Una petición DELETE que casa con la ruta /user') })

Ejemplos basados en patrones

Casa con las rutas acd y abcd

app.get('/ab?cd', (req, res) => {   res.send('ab?cd') })

Casa con las rutas abcd, abbcd, abbbcd, etc

app.get('/ab+cd', (req, res) => {   res.send('ab+cd') })

Casa con las rutas abcd, abxcd, abRANDOMcd, ab123cd y así sucesivamente

app.get('/ab*cd', (req, res) => {   res.send('ab*cd') })

Casa con las rutas /abe y /abcde

app.get('/ab(cd)?e', (req, res) => {   res.send('ab(cd)?e') })

Ejemplos basado en expresiones regulares

Note que las rutas no se encierran entre »

Casa con cualquier ruta que contenga una a

app.get(/a/, (req, res) => {   res.send('/a/') })

Casa con butterfly and dragonfly, pero no butterflyman, dragonflyman

app.get(/.*fly$/, (req, res) => {   res.send('/.*fly$/') })

Parámetros en las rutas

Puede pasar parámetros como parte de la URL, para ello debe seguir un formato determinado a la hora de crear la ruta, por ejemplo la siguiente ruta:

app.get('/users/:userId/books/:bookId', (req, res) => {   res.send(req.params) })

userId y bookId son parámetros accesibles a través de la variable req.params por tanto si realizamos la siguiente petición:

http://localhost:3000/users/34/books/8989

req.params.userId tendría valor de 34 mientras que req.params.bookId tendría el valor de 8989

Dado que el guión (-) y el punto (.) se interpretan literalmente, se pueden utilizar junto con los parámetros de ruta para fines útiles. Por ejemplo la siguiente ruta:

app.get('/flights/:from-:to', (req, res) => {   res.send(req.params) })

Casa con la siguiente URL http://localhost:3000/flights/LAX-SFO donde req.params.from toma el valor de LAX y req.params.to toma el valor de SFO.

Para tener más control sobre la cadena exacta que puede coincidir con un parámetro de ruta, puede agregar una expresión regular entre paréntesis (()):

app.get('/user/:userId(\\d+)', (req, res) => {   res.send(req.params) })

En la ruta anterior el valor que se pasa como userId debe ser un entero:

http://localhost:3000/user/24 -> casa http://localhost:3000/user/u24 -> no casa

Parámetros por POST

Para obtener los valores de los parámetros pasados por POST necesita agregar en el fichero app.js la siguiente línea: app.use(express.urlencoded({ extended: false }));, vea: Instalando Express – Un Framework Web Para NodeJS para más información, por ejemplo para obtener el nombre de usuario cuando se hace login:

app.post('/login', (req, res) => {   res.send({ "login": req.body.login, "pass": req.body.password }) })

Nótese que los parámetros se obtienen del objeto req.body en lugar de req.params

Deja un comentario

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.