Express, Sinatra para node.js
Desde su aparición, Sinatra, ha despertado la admiración de mucho, no solo de aquellos que trabajan con Ruby, sino de developers de otros lenguajes que han decidido crear micro frameworks Sinatra like para utilizar en su lenguaje favorito y portar su filosofía a otros ámbitos, en node.js tenemos a Express, el mismo esta madurando rápidamente y esta recibiendo mucho apoyo de la comunidad.
Instalación
Hay varias opciones para instalar Express, la primera opción es instalarlo desde su instalador online corriendo el siguiente comando.
$ curl http://expressjs.com/install.sh | sh # Si necesitamos permisos adicionales $ curl http://expressjs.com/install.sh | sudo sh
La segunda opción es usar npm (node package manager), el cual es conveniente instalar ya que muchos módulos y frameworks para node.js lo están usando como medio de distribución.
# Instalando Express y sus dependencias vía npm $ npm install express
La ultima opción es clonar el repo de github y compilarlo.
$git clone git://github.com/visionmedia/express.git #Actualizamos los sub modulos $ git submodule update --init #Compilamos $ make install
Hello World
Vamos a comenzar con un ejemplo simple, si ven el código a continuación verán que lo primero que hacemos es cargar el modulo express, creamos un server que por convención son llamados apps, luego crearemos la ruta, la misma puede consistir en un string o en una expresión regular, seguimos con una callback y un metodo HTTP, en el ejemplo usamos un metodo GET que apunta a / y cuyo callback dispara la función que nos devuelve el Hello World.
var express = require('express'), app = express.createServer(); app.get('/', function(req, res){ res.send('Hello Worldn'); }); app.listen(3000);
Si todo sale bien, deberíamos de ver algo así.
Otro ejemplo
Ahora pasemos a un ejemplo un poco mas complejo, en el mismo usaremos un archivo con un array JSON el cual hará de datasource.
[ { "name": "Minke" }, { "name": "Lidewij" }, { "name": "Eva" }, { "name": "Helen" }, { "name": "Wieke" }, { "name": "Fatima" } ]
El código del ejemplo comienza cargando el modulo Express y el modulo fs encargado de acceder al file system, levantamos el server, parseamos el datasource y lo asignamos a una variable, seguimos creando las rutas, el modelo, otra ruta para / la cual mostrara las instrucciones de uso y por ultimo le decimos a nuestra app que se quede escuchando en el port 3000.
var express = require('express'), fs = require('fs'); var app = express.createServer(); var players = JSON.parse(fs.readFileSync('players.json', 'utf8')); app.resource = function(path, obj) { this.get(path, obj.index); this.get(path + '/:id', obj.show); }; var Player = { index: function(req, res){ res.send(players); }, show: function(req, res){ res.send(players[req.params.id] || { error: 'player not found' }); } }; app.resource('/players', Player); app.get('/', function(req, res){ res.send([ '<p>GET /players</p>', '<p>GET /players/1</p>', ].join('n')); res.end(); }); app.listen(3000);
Es hora de correr y probar el ejemplo, primero intentemos obtener todos los registros.
# Muestra la totalidad de los registros $ curl http://localhost:3000/players/
Ahora probemos traer un registro especifico.
#Devuelve el nombre del registro 3 $ curl http://localhost:3000/players/3