{"id":200,"date":"2010-08-13T00:11:35","date_gmt":"2010-08-13T00:11:35","guid":{"rendered":"http:\/\/realnorth.net\/blog\/?p=200"},"modified":"2010-08-13T00:11:35","modified_gmt":"2010-08-13T00:11:35","slug":"express-sinatra-para-nodejs","status":"publish","type":"post","link":"https:\/\/realnorth.net\/blog\/express-sinatra-para-nodejs\/","title":{"rendered":"Express, Sinatra para node.js"},"content":{"rendered":"<p>Desde su aparici\u00f3n, <a href=\"http:\/\/www.sinatrarb.com\/\" target=\"_blank\">Sinatra<\/a>, ha despertado la admiraci\u00f3n 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\u00eda a otros \u00e1mbitos, en <a href=\"http:\/\/nodejs.org\/\" target=\"_blank\">node.js<\/a> tenemos a <a href=\"http:\/\/expressjs.com\/\" target=\"_blank\">Express<\/a>, el mismo esta madurando r\u00e1pidamente y esta recibiendo mucho apoyo de la comunidad.<\/p>\n<h3>Instalaci\u00f3n<\/h3>\n<p>Hay varias opciones para instalar <a href=\"http:\/\/expressjs.com\/\" target=\"_blank\">Express<\/a>, la primera opci\u00f3n es instalarlo desde su instalador online corriendo el siguiente comando.<\/p>\n<pre>\n$ curl http:\/\/expressjs.com\/install.sh | sh\n# Si necesitamos permisos adicionales\n$ curl http:\/\/expressjs.com\/install.sh | sudo sh\n<\/pre>\n<p>La segunda opci\u00f3n es usar <a href=\"http:\/\/npm.mape.me\/\" target=\"_blank\">npm<\/a> (node package manager), el cual es conveniente <a href=\"http:\/\/github.com\/isaacs\/npm\" target=\"_blank\">instalar<\/a> ya que muchos m\u00f3dulos y frameworks para node.js lo est\u00e1n usando como medio de distribuci\u00f3n.<\/p>\n<pre>\n# Instalando Express y sus dependencias v\u00eda npm\n$ npm install express\n<\/pre>\n<p>La ultima opci\u00f3n es clonar el repo de github y compilarlo.<\/p>\n<pre>\n$git clone git:\/\/github.com\/visionmedia\/express.git\n#Actualizamos los sub modulos\n$ git submodule update --init\n#Compilamos\n$ make install\n<\/pre>\n<h4>Hello World<\/h4>\n<p>Vamos a comenzar con un ejemplo simple, si ven el c\u00f3digo a continuaci\u00f3n ver\u00e1n que lo primero que hacemos es cargar el modulo <strong>express<\/strong>, creamos un server que por convenci\u00f3n son llamados <strong>apps<\/strong>, luego crearemos la ruta, la misma puede consistir en un string o en una expresi\u00f3n regular, seguimos con una callback y un metodo HTTP, en el ejemplo usamos un metodo GET que apunta a <strong>\/<\/strong> y cuyo callback dispara la funci\u00f3n que nos devuelve el Hello World.<\/p>\n<pre>\nvar express = require('express'),\n    app = express.createServer();\n    app.get('\/', function(req, res){\n    res.send('Hello Worldn');\n});\napp.listen(3000);\n<\/pre>\n<p>Si todo sale bien, deber\u00edamos de ver algo as\u00ed.<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/realnorth.net\/blog\/wp-content\/uploads\/2010\/08\/paulo@kendra-Desktop_005.png\" alt=\"Hello World - Express\" title=\"Hello World - Express\" \/><\/p>\n<h4>Otro ejemplo<\/h4>\n<p>Ahora pasemos a un ejemplo un poco mas complejo, en el mismo usaremos un archivo con un array JSON el cual har\u00e1 de datasource.<\/p>\n<pre>\n[\n    { &quot;name&quot;: &quot;Minke&quot; },\n    { &quot;name&quot;: &quot;Lidewij&quot; },\n    { &quot;name&quot;: &quot;Eva&quot; },\n    { &quot;name&quot;: &quot;Helen&quot; },\n    { &quot;name&quot;: &quot;Wieke&quot; },\n    { &quot;name&quot;: &quot;Fatima&quot; }\n]\n<\/pre>\n<p>El c\u00f3digo del ejemplo comienza cargando el modulo <a href=\"http:\/\/expressjs.com\/\" target=\"_blank\">Express<\/a> y el modulo <strong>fs<\/strong> 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. <\/p>\n<pre>\nvar express = require('express'),\n\tfs = require('fs');\n\nvar app = express.createServer();\nvar players = JSON.parse(fs.readFileSync('players.json', 'utf8'));\n\napp.resource = function(path, obj) {\n    this.get(path, obj.index);\n    this.get(path + '\/:id', obj.show);\n};\n\nvar Player = {\n    index: function(req, res){\n        res.send(players);\n    },\n    show: function(req, res){\n        res.send(players[req.params.id] || { error: 'player not found' });\n    }\n};\n\napp.resource('\/players', Player);\n\napp.get('\/', function(req, res){\n    res.send([\n        '&lt;p&gt;GET \/players&lt;\/p&gt;',\n        '&lt;p&gt;GET \/players\/1&lt;\/p&gt;',\n    ].join('n')); \n\tres.end();\n});\n\napp.listen(3000);\n<\/pre>\n<p>Es hora de correr y probar el ejemplo, primero intentemos obtener todos los registros.<\/p>\n<pre>\n# Muestra la totalidad de los registros\n$ curl http:\/\/localhost:3000\/players\/\n<\/pre>\n<p><img decoding=\"async\" src=\"http:\/\/realnorth.net\/blog\/wp-content\/uploads\/2010\/08\/paulo@kendra-_006.png\" alt=\"\" title=\"\" \/><\/p>\n<p>Ahora probemos traer un registro especifico.<\/p>\n<pre>\n#Devuelve el nombre del registro 3\n$ curl http:\/\/localhost:3000\/players\/3\n<\/pre>\n<p><img decoding=\"async\" src=\"http:\/\/realnorth.net\/blog\/wp-content\/uploads\/2010\/08\/paulo@kendra-_007.png\" alt=\"\" title=\"\" \/><\/p>\n<h4>Recursos<\/h4>\n<ul>\n<li><a href=\"http:\/\/expressjs.com\/\" target=\"_blank\">Express<\/a> (High performance, high class web development for Node.js)<\/li>\n<li><a href=\"http:\/\/github.com\/visionmedia\/express\" target=\"_blank\">Express<\/a> (github repo)<\/li>\n<li><a href=\"http:\/\/github.com\/isaacs\/npm\" target=\"_blank\">npm<\/a> (node package manager)<\/li>\n<li><a href=\"http:\/\/github.com\/visionmedia\/kiwi\" target=\"_blank\">kiwi<\/a> (otro node package manager para node.js)<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Desde su aparici\u00f3n, Sinatra, ha despertado la admiraci\u00f3n 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\u00eda a otros \u00e1mbitos, en node.js tenemos a Express, el mismo esta madurando r\u00e1pidamente [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[17,33,47,50],"class_list":["post-200","post","type-post","status-publish","format-standard","hentry","category-development","tag-express","tag-node-js","tag-rest","tag-sinatra"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/realnorth.net\/blog\/wp-json\/wp\/v2\/posts\/200","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/realnorth.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/realnorth.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/realnorth.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/realnorth.net\/blog\/wp-json\/wp\/v2\/comments?post=200"}],"version-history":[{"count":0,"href":"https:\/\/realnorth.net\/blog\/wp-json\/wp\/v2\/posts\/200\/revisions"}],"wp:attachment":[{"href":"https:\/\/realnorth.net\/blog\/wp-json\/wp\/v2\/media?parent=200"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/realnorth.net\/blog\/wp-json\/wp\/v2\/categories?post=200"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/realnorth.net\/blog\/wp-json\/wp\/v2\/tags?post=200"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}