express: 2. rutas sencillas

Las rutas express y los verbos REST

Georgia O'Keeffe

archivado en: JavaScript / 5 octubre, 2015 / taller:

Seguimos con express. En la entrada anterior vimos cómo levantar un server muy sencillo con este frame de node. En un archivo, que por convención se suele llamar app.js, escribimos apenas estas pocas líneas:

/* Cargamos el módulo express */

var express = require("express");

/* Definimos una instancia de express */

var app = express();

app.get('/', function(req, res) {

res.send('Hola Mundo');

});

var server = app.listen(3000, function () {

console.log('Servidor levantado en el puerto 3000');

});

Y luego ya solo necesitábamos ejecutarlo con node...

node app.js

...para que nuestro server estuviera disponible en localhost:3000/.

Vamos a profundizar algo más en esto...

Un poco de jerga http

Como es sabido, gran parte de la comunicación en la red se basa en el protocolo http, que entre otras cosas define cómo debe ser la comunicación entre un dispositivo que recibe peticiones y otro que las solicita. Es decir, entre un servidor y los clientes. Las peticiones se denominan request y las respuestas del servidor response. Y si nos fijamos estos son justo los dos parámetros que recibe el método get que vimos antes. Pero, ¿por qué usamos este método get?

Muy sencillo, porque otra de las características del protocolo de http es el uso de unos verbos concretos cuando se lanzan las peticiones (request). Los principales son:

  • GET: para solicitar un recurso.
  • POST: para insertar.
  • PUT: para actualizar.
  • DELETE: para borrar.

(Ver esta entrada para una explicación más detallada).

Por lo tanto, cuando esto:

app.get('/', function(req, res) {

res.send('Hola Mundo');

});

Equivale a decirle a Express: cuando recibas una petición (request) del tipo get de lo que hay en la dirección "/", envía una respuesta (response) que sea el string "Hola Mundo". Si en cambio, la dirección sirviese para actualizar un recurso, por ejemplo al recibir los datos de un formulario, deberíamos gestionarla con el método put().

app.post('/', function (req, res) {

res.send('Datos insertados');

});

De hecho, se pueden agrupar las respuestas a las distintas peticiones contra la misma url:

app.route('/libro')

.get(function (req, res) {

res.send('Devuelvo un libro');

})

.post(function (req, res) {

res.send('Añado un libro');

})

.put(function (req, res) {

res.send('Actualizo un libro');

});

Comprendido esto, vamos a rutear un poco nuestro servidor.

Para no andar parando (ctrl+q) y levantando el server en producción, lo mejor es instalar nodemon:

npm install -g nodemon

Y luego correr la aplicación desde este programa:

nodemon app.js

Rutas en cascada

Cuando express recibe una petición de determinada url va repasando en orden las que tiene definidas. Por ejemplo, si tenemos este sistema de rutas:

app.get('/', function (req, res) {

res.send('Enviando la página principal');

});

app.get('/foo', function (req, res) {

res.send('Enviando foo');

});

app.get('/foo/bar', function (req, res) {

res.send('Enviando bar');

});

Y pedimos http://localhost:3000/foo/bar, primero mira en la primera ruta y como no se corresponde, pasa a la segunda y, como tampoco coincide esta, a la tercera. Pero si se solicita una url inexistente, como http://localhost:3000/adaadasda, responde de una manera bastante feúna:

Cannot GET /adaadasda

Podemos solucionar esto colocando una respuesta 404 (recurso no encontrado) al final.

app.use(function (req, res, next) {

res.status(404);

res.send('Ná, que no hay nada ahí');

});

Volveré sobre este nuevo método use() y lo del status 404 más adelante, de momento baste con comprender cómo se van atendiendo las peticiones en cascada: si esta no funciona, paso a la siguiente.

¡OJO! esto de la cascada también supone que si encuentra algo, se para. Así, por ejemplo, si definimos estas rutas:

app.get('/*', function (req, res) {

res.send('Enviando la página principal');

});

app.get('/foo', function (req, res) {

res.send('Enviando foo');

});

Nunca podremos llegar a foo, pues en la primera abarca todas las coincidencias.

Bueno, pues por hoy lo dejo aquí...

|| Tags: , , ,

valoración de los lectores sobre express: 2. rutas sencillas

  • estrellica valoración positiva
  • estrellica valoración positiva
  • estrellica valoración positiva
  • estrellica valoración positiva
  • estrellica valoración positiva
  • 5 sobre 5 (1 votos)

¿Te ha parecido útil o interesante esta entrada?
dormido, valoración 1 nadapensativo, valoración 2 un poco sonrisa, valoración 3 a medias guiño, valoración 4 bastante aplauso, valoración 5 mucho

Tú opinión es muy importante, gracias por compartirla!

Los comentarios están cerrados.