permalink

6

¿Y ahora? #nodejs

Bueno, ya tengo instalado node.js (aka Node, Node.js, NodeJS) en mi computador, ¿Y ahora?.

Esta es una pregunta que se hacen muchos, node.js se ha vuelto todo un tema en los últimos meses, años (?). Solo ver cuanto se habla en redes sociales, o los trends en Google y sumado al hecho de que Microsoft unió fuerzas con Joyent ( la empresa encargada del desarrollo de node ). Sin embargo, node.js es más que una simple moda, es el futuro de las aplicaciones web ( si, al fin lo dije ), javascript es el lenguaje por excelencia en cuanto a desarrollo front-end y ahora que lo tenemos del lado del servidor es más que una bendición, ya que debido a la flexibilidad y fácil uso de este lenguaje ha traído enormes beneficios a lo que es el desarrollo de aplicaciones web.

Entorno de Trabajo

En previos articulos hemos visto como instalar node en las distintas plataformas, así que si no lo has instalado te invitamos que le des un vistazo.

Una vez que tienes instalado node.js en tu sistema lo siguiente es establecer un entorno de trabajo. Si bien es cierto para poder empezar a trabajar con Node lo único que ocupas es un editor de texto y la linea de comandos, es bastante útil tener un entorno de trabajo que te ayude a trabajar de una manera más fluida. Si estas trabajando en MacOS, Texmate es editor de preferencia, pero tambien esta Sublime Text que es una opción multiplataforma además existen otras opciones, al final es cuestión de gustos ( yo uso una mezcla de vim y sublime text ).

Creando web aplicaciones con Node.js

Al momento de crear aplicaciones web, estás ante muchas decisiones: crear un tipo de aplicación REST API o no, Aplicaciones de una sola página (Single Page App), persistencia de datos o no, escalable o no, y asi.

Las ventajas de escribir apps de una sola página es la experiencia de usuario ( menos páginas recargadas, etc. ), tambien ofrece un soporte nativo fácil para móviles, sacando provecho de la API generada inicialmente ( esto quiere decir que no debas crear una nueva estructura para ofrecer una versión móvil del sitio ). Ya que es muy fácil crear una aplicación basada en servicios API que una con n cantidad de rutas distintas y n request a tu servidor. Además de ser eficientes implican un huella en el servidor bastante baja, ayudando por ende a la escalabilidad de la misma. Uno de los grandes problemas es SEO, ya que como son app de una sola página es más díficil localizar contenido ( hashbangs y todo el tema ) (aunque ya hay soluciones ). Asi que podemos decir que tenemos ventajas y desventajas para poder elegir este estilo de aplicación.

En la imagen a continuación podemos observar un diagrama que nos ayuda a identificar los puntos criticos a tomar en cuenta al momento de crear nuestras aplicaciones. Este esquema es muy útil ya que este modelo estable un patrón de trabajo bastante sencillo y estable.

 

Nota: Si tu servicio esta basado en REST API asegurate que tus respuestas sean estandares, usa herramientas que te ayudan a escribir mejor código, como jslint o jsonlint

Si te decides por utilizar múltiples rutas y request estas ante un gran proyecto, aunque podrias utilizar el modelo anterior para reducir tiempos de carga o recarga, asi como menor cantidad de kb provenientes de tu servidor. Lo cual se convierte a largo plazo un ahorro, asi como una mejor experiencia de usuario.

Además puedes sacar provecho de Local Storage, y evitar recargar una y otra vez recursos que pueden ser almacenados en el ordernador del usuario final, así como configuraciones personales y otras cosas. Y si tengo que darte un consejo este seria: mira hacia el futuro y abraza las nuevas tecnologías haz que tus usuarios lo hagan tambien y asi hacemos del Internet un mejor lugar.

Ayuda

Uno de los grandes factores que han contribuido a la popularidad de Node.js es su comunidad, es simplemente agradable y además bien entusiasta, actualmente hay 5141 modúlos en npm a disposición de todo aquel que quiera trabajar en casi cualquier cosa. Desde algunos bastante útiles a otros simplemente interesantes

Pero para poder crear este tipo de aplicaciones web se ocupan herramientas, si eres un js ninja te va gustar empezar desde 0, pero apliquemos el DRY y usemos estos modúlos que la comunidad ha creado.

Mi stack esta particularmente constituido por: expressjs, redis y nowjs (que es una útileria con esteroides de socket.io para aplicaciones en tiempo real).

Express

Express es un framework que realmente te hace fácil el proceso de crear aplicaciónes, es bastante robusto e inspirado en sinatra. Para instalarlo:

npm install -g express 

Para crear una aplicación y toda su estructura:

express appnombre cd appnombre node app.js 

Entre las tantas cosas que tiene este framework podemos destacar:

  • Escrito sobre connect el cual nos provee:
    • Session Handler
    • 11 middleware poderosos asi como de terceros.
    • cookieParser, bodyParser…
    • vhost
    • router, y contando…

En futuros articulos escribire más acerca de express.

Existen otras soluciones como flatiron o hook.io que proveen de herramientas bastante útiles, además esta railwayjs y por último pero no menos importante Geddy. Cada uno con sus virtudes y defectos, en cuanto a popularidad la lista la encabeza express. Una de las ventajas de utilizar un framework en cuanto a aplicaciones web, radica en el hecho del manejo de rutas y sessiones, y archivos estáticos son simplificados enormemente por sus middleware y el API de cada uno de ellos.

Nowjs

Como su descripción lo dice: Hace de las aplicaciones en tiempo real un trabajo fácil. Nowjs crea un namespace tanto en el servidor como el cliente, asi que puedes crear funciones que funcionan en tu servidor y acceder a ellas desde el navegador ( es de gran utilidad en navegadores que no soportan nuevos estandares de javascript ).

Para instalarlo:

npm install -g now 

Luego en tu aplicación:

var nowjs = require('now'); 

Y en el lado del cliente:

// jQuery tiene que cargar primero
<script src="/nowjs/now.js">
</script>

Este es el hello world de nowjs:

// En el lado del cliente helloworld.html
<!DOCTYPE html>
<html lang="en">
<head>
 <title>nowjs chat </title>
 <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
 <script src="/nowjs/now.js"></script>
 <script>
	$(document).ready(function(){
	  now.receiveMessage = function(name, message){
          $("#messages").append("<br>" + name + ": " + message);
	}
	$("#send-button").click(function(){
	  now.distributeMessage($("#text-input").val());
    	  $("#text-input").val("");
	});
    	now.name = prompt("What's your name?", "");
	});
 </script>
</head>
<body>
  <div id="messages"></div>
  <input type="text" id="text-input">
  <input type="button" value="Send" id="send-button">
</body>
</html>

Y en tu servidor:

var html = require('fs').readFileSync(__dirname+'/helloworld.html');
var server = require('http').createServer(function(req, res){
		res.end(html);
	});
server.listen(8080);
var nowjs = require("now");
var everyone = nowjs.initialize(server);
everyone.now.distributeMessage = function(message){
	everyone.now.receiveMessage(this.now.name, message);
};

Y listo ya tienes tu propia sala de chat. Al igual que express hablaremos más detallado de nowjs en otros articulos. La ventaja de utilizar nowjs es que simplifica el uso de socket.io, y no es que sea difícil, pero hace aún más fácil todo el proceso.

Actualmente existen suficientes modúlos como para preocuparse de que node.js no ” tenga algo que ocupe “, con decirte que hasta hay un proyecto con el propósito de traer el api de Canvas a tu terminal ( term-canvas )

¿Y quienes usan node.js?

Luego de casi 2 años en el medio ya existen múltiples aplicaciones exitosas y en crecimiento:

En conclusión

El escribir una aplicación con node.js es una de las cosas más sencillas, lo único que realmente necesitas es voluntad y buenas ideas para crear aplicaciones y modúlos. Una de las grandes desventajas que encontre al empezar con nodejs ( como hace unos 10 meses ) es que toda la documentación esta escrita en inglés y todavia esta en inglés asi que muchas gracias por leer NodeHispano y ayudanos a difundir el sitio para que poco a poco la comunidad hispano-hablante vaya creciendo.

Links Recomendados

Sin orden alguno.

Pro Tips

  • Unete a los canales IRC de node.js en freenode (#node.js)
  • Asi como el IRC de nodejitsu (#nodejitsu) y mira la documentación que ellos manejan.
  • Sigue a los grandes en twitter
  • Dale follow al projecto de node.js en Github

Goodie

En vez de hacer una concatenación con +:

console.log("hola" + "mundo") 

Puedes hacer: (separando con comas los argumentos)

console.log("hola","mundo"); // "Hola Mundo" 

Autor de éste Artículo

Alejandro Morales, Hondureño, Estudiante universitario, Astrolover, HTML5, CSS3, node.js aficionado. Gran observador de la conducta humana. Conocido en la internet y IRC como “alejandromg”. Puedes seguirlo en twitter, o ver en lo que esta trabajando en github, o en forrst.

  • http://twitter.com/fmanaya Felipe Martin Anaya

    Se ha desplazado un paréntesis derecho :-)
    console.log(“Hola”,”Mundo”); // “Hola Mundo”

    • Anonymous

      Hola Felipe, muchas gracias ya lo cambio.

    • Alejandro Morales

      Felipe, esa es la parte interesante, es una de las singularidades de javascript `console.log)(“Hola”,”Pedro” ` esta correctamente escrito y es js válido, por eso es un Goodie ;-) a lo mejor pude haber explicado un poco más para evitar confusiones. Saludos.

  • http://twitter.com/pinguxx Ivan Torres

    Hola, tambien para empezar pueden usar cloud9ide

    • Anonymous

      Muchas gracias Ivan por tus aportes a la comunidad, estamos preparando una publicación en la cual vamos a hablar de Cloud9 IDE, es una excelente herramienta para todo desarrollador con Node.js

  • Brandon Stiven Ambuila Balanta

    gracias