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:
- Conectarnos a una base de datos SQLite usando NodeJS
- Instalando Express – Un Framework Web Para NodeJS
- NVM – Administrador de versiones para NodeJS
- Recarga tus aplicaciones automáticamente con Nodemon
- 3 formas de instalar Node.js
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