Vous êtes sur la page 1sur 23

NodeJS y angular js 80%

Node.js
Node.js

Desarrollador

Node.js Developers
Joyent
nodejs.org

Informacin general

Diseador

Ryan Lienhart Dahl

Lanzamiento

27 de mayo de 20091

inicial

ltima versin

0.12.2

estable

31 de marzo de 2015

ltima versin

0.11.15

en pruebas

20 de enero de 2015

Gnero

Dirigida por eventos

Programado en C++, JavaScript

Sistema

Windows, Mac OS

operativo

X, Linux,Solaris, FreeBSD, OpenBSD,webOS

Licencia

Licencia MIT

Estado actual

Activo

[editar datos en Wikidata]

Node.js es un entorno en tiempo de ejecucin multiplataforma, de cdigo abierto, para la


capa del servidor (pero no limitndose a ello) basado en el lenguaje de
programacin ECMAScript, asncrono, con I/O de datos en una arquitectura orientada a
eventosy basado en el motor V8 de Google. Fue creado con el enfoque de ser til en la
creacin de programas de red altamente escalables, como por ejemplo, servidores
web.2 Fue creado por Ryan Dahl en 2009 y su evolucin est apadrinada por la
empresa Joyent, que adems tiene contratado a Dahl en plantilla.3 4
Node.js es similar en su propsito a Twisted o Tornado de Python, Perl Object
Environment de Perl, React de PHP, libevent olibev de C, EventMachine de Ruby, vibe.d d
e D y de Java existe Apache MINA, Netty, Akka, Vert.x, Grizzly o Xsocket. Al contrario que
la mayora del cdigo JavaScript, no se ejecuta en un navegador, sino en el servidor.
Node.js implementa algunas especificaciones de CommonJS.5 Node.js incluye un
entorno REPL para depuracin interactiva.
ndice
[ocultar]

1Ejemplos

2Aspectos tcnicos
o

2.1Paralelismo

2.2V8

2.3Mdulos

2.4Desarrollo homogneo entre cliente y servidor

2.5Lazo de eventos

3Comunidad

4Vase tambin

5Referencias

6Enlaces externos

Ejemplos[editar]
Versin de un hola mundo de un Servidor HTTP escrito en Node.js:

var http = require('http');


http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end('Hello World\n');
}).listen(8000);
console.log('Server running at http://127.0.0.1:8000/');

Otro ejemplo con un servidor TCP que escucha en el puerto 7000 y responde con
cualquier cosa que se le enve:
var net = require('net');
net.createServer(function (stream) {
stream.write('hello\r\n');
stream.on('end', function () {
stream.end('goodbye\r\n');
});
stream.pipe(stream);
}).listen(7000);

Aspectos tcnicos[editar]
Paralelismo[editar]
Node.js funciona con un modelo de evaluacin de un nico hilo de ejecucin, usando
entradas y salidas asncronas las cuales pueden ejecutarse concurrentemente en un
nmero de hasta cientos de miles sin incurrir en costos asociados al cambio de
contexto.6 Este diseo de compartir un nico hilo de ejecucin entre todas las solicitudes
atiende a necesidades de aplicaciones altamente concurrentes, en el que toda operacin
que realice entradas y salidas debe tener una funcin callback. Un inconveniente de este
enfoque de nico hilo de ejecucin es que Node.js requiere de mdulos adicionales
como cluster7 para escalar la aplicacin con el nmero de ncleos de procesamiento de la
mquina en la que se ejecuta.

V8[editar]
V8 es el ambiente de ejecucin para JavaScript creado para Google Chrome. Es software
libre desde 2008, est escrito en C++ y compila el cdigo fuente JavaScript en cdigo de
mquina en lugar de interpretarlo en tiempo real.
Node.js contiene libuv para manejar eventos asncronos. Libuv es una capa de abstraccin
de funcionalidades de redes y sistemas de archivo en sistemas Windows y sistemas
basados en POSIX como Linux, Mac OS X y Unix.
El cuerpo de operaciones de base de Node.js est escrito en JavaScript con mtodos de
soporte escritos en C++. hv g vgu hg

Mdulos[editar]
Node.js incorpora varios "mdulos bsicos" compilados en el propio binario, como por
ejemplo el mdulo de red, que proporciona una capa para programacin de red asncrona
y otros mdulos fundamentales, como por ejemplo Path, FileSystem, Buffer, Timers y el de
propsito ms general Stream. Es posible utilizar mdulos desarrollados por terceros, ya
sea como archivos ".node" precompilados, o como archivos en javascript plano. Los
mdulos Javascript se implementan siguiendo la especificacin CommonJS para
mdulos,8 utilizando una variable de exportacin para dar a estos scripts acceso a
funciones y variables implementadas por los mdulos.9
Los mdulos de terceros pueden extender node.js o aadir un nivel de abstraccin,
implementando varias utilidades middleware para utilizar en aplicaciones web, como por
ejemplo los frameworks connect y express. Pese a que los mdulos pueden instalarse
como archivos simples, normalmente se instalan utilizando el Node Package Manager
(npm) que nos facilitar la compilacin, instalacin y actualizacin de mdulos as como la
gestin de las dependencias. Adems, los mdulos que no se instalen el directorio por
defecto de mdulos de Node necesitarn la utilizacin de una ruta relativa para poder
encontrarlos. El wiki Node.js proporciona una lista de varios de los mdulos de terceros
disponibles.

Desarrollo homogneo entre cliente y servidor[editar]


Node.js puede ser combinado con una base de datos documental (por
ejemplo, MongoDB o CouchDB) y JSON lo que permite desarrollar en un ambiente de
desarrollo JavaScript unificado. Con la adaptacin de los patrones para desarrollo del lado
del servidor tales como MVC y sus variantes MVP, MVVM, etc. Node.js facilita
la reutilizacin de cdigo del mismo modelo de interfaz entre el lado del cliente y el lado del
serbbg b

Lazo de eventos[editar]
Node.js se registra con el sistema operativo y cada vez que un cliente establece una
conexin se ejecuta un callback. Dentro del ambiente de ejecucin de Node.js, cada
conexin recibe una pequea asignacin de espacio de memoria dinmico, sin tener que
generar un hilo de trabajo.10 A diferencia de otros servidores dirigidos por eventos, el lazo
de manejo de eventos de Node.js no es llamado explcitamente sino que se activa al final
de cada ejecucin de una funcin de callback. El lazo de manejo de eventos se termina
cuando ya no quedan eventos por atender.

Comunidad[editar]
Existe una comunidad muy activa de desarrolladores de Node.js que se comunican a
travs de grupos de discusin, nodejs y nodejs-dev y el canal IRC #node.js enfreenode. La
comunidad se rene en NodeConf, una convencin de desarrolladores centrada en
Node.js.11

Qu es AngularJS

Por Alberto Basalo

y Miguel Angel Alvarez

28 de agosto de 2014

8 Comentarios

Javascript, Frameworks Javascript

Descripcin general sobre AngularJS, el framework


Javascript, as como los principales componentes que
tiene y los conceptos que debemos conocer antes de
poner manos en el cdigo.
AngularJS es Javascript. Es un proyecto de cdigo abierto, realizado en
Javascript que contiene un conjunto de libreras tiles para el desarrollo de
aplicaciones web y propone una serie de patrones de diseo para llevarlas a
cabo. En pocas palabras, es lo que se conoce como un framework para el
desarrollo, en esta caso sobre el lenguaje Javascript con programacin del lado
del cliente.
Puedes encontrar el proyecto de AngularJS en su propio sitio web: AngularJS,
Superheroic JavaScript MVW Framework. Al ser un proyecto de cdigo abierto
cualquier persona con un poco de curiosidad echar un vistazo con profundidad
y ver cmo se ha escrito, incluso admiten colaboraciones de desarrolladores
que quiera aportar cosas.
Nota: Este artculo es una transcripcin de la exposicin de Alberto Basalo en DesarrolloWeb.com /
EscuelaIT que se emiti en abierto por webinar. Al pie del texto encontrars un vdeo de esta charla.
El bloque anterior de esta ponencia la hemos publicado ya en el artculo "Por qu AngularJS".

Mejoras del HTML


Este Javascript pretende que los programadores mejoren el HTML que hacen.
Que puedan producir un HTML que, de manera declarativa, genere
aplicaciones que sean fciles de entender incluso para alguien que no tiene
conocimientos profundos de informtica. El objetivo es producir un HTML

altamente semntico, es decir, que cuando lo leas entiendas de manera clara


qu es lo que hace o para qu sirve cada cosa.
Lgicamente, AngularJS viene cargado con todas las herramientas que los
creadores ofrecen para que los desarrolladores sean capaces de crear ese
HTML enriquecido. La palabra clave que permite ese HTML declarativo en
AngularJS es "directiva", que no es otra cosa que cdigo Javascript que mejora
el HTML. Puedes usar el que viene con AngularJS y el que han hecho terceros
desarrolladores, puesto que muchas personas estn contribuyendo con
pequeos proyectos -independientes del propio framework- para enriquecer el
panorama de directivas disponibles. Hasta este punto sers un "consumidor de
directivas", y finalmente cuando vayas tomando experiencia sers capaz de
convertirte en un "productor de directivas", enriqueciendo t mismo las
herramientas para mejorar tu propio HTML.

Promueve patrones de diseo adecuados


para aplicaciones web
Angular promueve y usa patrones de diseo de software. En concreto
implementa lo que se llama MVC, aunque en una variante muy extendida en el
mundo de Javascript que luego comentaremos con ms detalle. Bsicamente
estos patrones nos marcan la separacin del cdigo de los programas
dependiendo de su responsabilidad. Eso permite repartir la lgica de la
aplicacin por capas, lo que resulta muy adecuado para aplicaciones de
negocio y para las aplicaciones SPA (Single Page Aplication).
Nota: Las SPA o "Aplicaciones de una sola pgina", son sitios web donde los usuarios perciben una
experiencia similar a la que se tiene con las aplicaciones de escritorio. En este tipo de sitios la
pgina no se recarga, no existe una navegacin de una pgina a otra totalmente diferente, sino que
se van intercambiando las "vistas". Tcnicamente podramos decir que, al interactuar con el sitio, el
navegador no recarga todo el contenido, sino nicamente vistas dentro de la misma pgina.

AngularJS a vista de pjaro


Ahora vamos a hacer un breve recorrido para nombrar y describir con unos
pequeos apuntes aquellos elementos y conceptos que te vas a encontrar
dentro de AngularJS.

Primeramente tenemos que hablar sobre el gran patrn que se usa en Angular,
el conocido Modelo, Vista, Controlador.

Vistas: Ser el HTML y todo lo que represente datos o informacin.

Controladores: Se encargarn de la lgica de la aplicacin y sobre todo de las


llamadas "Factoras" y "Servicios" para mover datos contra servidores o memoria local
en HTML5.

Modelo de la vista: En Angular el "Modelo" es algo ms de aquello que se


entiende habitualmente cuando te hablan del MVC tradicional, osea, las vistas son algo
ms que el modelo de datos. En modo de ejemplo, en aplicaciones de negocio donde
tienes que manejar la contabilidad de una empresa, el modelo seran los movimientos
contables. Pero en una pantalla concreta de tu aplicacin es posible que tengas que ver
otras cosas, adems del movimiento contable, como el nombre de los usuarios, los
permisos que tienen, si pueden ver los datos, editarlos, etc. Toda esa informacin, que
es til para el programador pero que no forma parte del modelo del negocio, es a lo que
llamamos el "Scope" que es el modelo en Angular.
Nota: Por ese motivo por el cual en AngularJS tienes unos modelos un poco diferentes, algunos
autores dicen que el patrn que utiliza el framework es el MVVM Model-View-View-Model. En
resumen, el modelo de la vista son los datos ms los datos adicionales que necesitas para
mostrarlos adecuadamente.

Adems del patrn principal, descrito hasta ahora tenemos los mdulos:
Mdulos: La manera que nos va a proponer AngularJS para que nosotros como

desarrolladores seamos cada vez ms ordenados, que no tengamos excusas


para no hacer un buen cdigo, para evitar el cdigo espaguetti, ficheros
gigantescos con miles de lneas de cdigo, etc. Podemos dividir las cosas,
evitar el infierno de las variables globales en Javascript, etc. Con los mdulos
podemos realizar aplicaciones bien hechas, de las que un programador pueda
sentirse orgulloso y sobre todo, que nos facilite su desarrollo y el
mantenimiento.

Dos "mundos" en AngularJS


Ahora tenemos que examinar AngularJS bajo otra perspectiva, que nos facilite
entender algunos conceptos y prcticas habituales en el desarrollo. Para ello
dividimos el panorama del framework en dos reas.

Parte del HTML: Es la parte declarativa, con las vistas, as como las directivas y
filtros que nos provee AngularJS, as como los que hagamos nosotros mismos o terceros
desarrolladores.

Parte Javascript puro: Que sern los controladores, factoras y servicios.

Es importante sealar aqu, aunque se volver a incidir sobre ese punto, que
nunca jams se deber acceder al DOM desde la parte del Javascript. Es un
pecado mortal ya que esa parte debe ser programada de manera agnstica, sin
tener en cuenta la manera en la que se van a presentar los datos.

En medio tendremos el denominado Scope, que como decimos representa al


modelo en Angular. En resumen no es ms que un objeto Javascript el cual
puedes extender creando propiedades que pueden ser datos o funciones. Nos
sirve para comunicar desde la parte del HTML a la parte del Javascript y
viceversa. Es donde se produce la "magia" en Angular y aunque esto no sea
del todo cierto, a modo de explicacin para que se entienda algo mejor,
podemos decir que AngularJS se va a suscribir a los cambios que ocurran en el
scope para actualizar la vista. Y al revs, se suscribir a los cambios que
ocurran en la vista y con eso actualizar el scope.
En el siguiente artculo comenzaremos ya con cdigo, as que los impacientes
tendrn ya sus deseos hechos realidad.
Puedes ver el vdeo de esta parte de la presentacin sobre Qu es AngularJS.

Qu es AngularJS? Una breve introduccin


Hace unas semanas me encontraba buscando informacin sobre frameworks
JavaScript del lado cliente (client-side) para desarrollar aplicaciones web. He de
decir que los resultados al principio fueron apabullantes ya que la lista de este
tipo de frameworks result ser muy larga: Backbone.js, Ember.js, Knockout,
Agility.js, KendoUI y muchos ms. Entre ellos estaba AngularJS, haba visto un
par de screencast sobre l, as que me decid a estudiarlo ms a fondo.

Despus de un tiempo leyendo documentacin,


algn que otro libro y poniendo sobre el terreno lo aprendido de AngularJS,
puedo decir que estoy gratamente sorprendido con l y que adems, dar
mucho
de
qu
hablar
de
aqu
en
adelante.

As que, qu es AngularJS?.
AngularJS es un framework JavaScript de desarrollo de aplicaciones web en el
lado cliente, viene de la mano de los chicos de Google y se podra decir que
utiliza el patrn MVC (Model-View-Controller), aunque ellos mismos lo definen
ms bien como un MVW (Model-View-Whatever (whatever works for you)).
Puedes
leer
ms
sobre
esto
en esta
publicacin
de
Google+.
Los creadores de este framework estn convencidos de que HTML no est an
preparado para servir vistas dinmicas de un modo eficiente, as que han
decidido extender la sintaxis de HTML para darle ms funcionalidad.
Vale, espera, extender la sintaxis de HTML?. Bien, esto puede resultar algo
confuso al principio as que os voy a dejar un ejemplo para que entendis a que
me
refiero.

En el ejemplo anterior podis encontrar elementos nuevos como ng-app, ngmodel y el nombre de una variable rodeada de dobles corchetes. Las dos
primeras son lo que en AngularJS llaman directives y la tercera es el modo de
mostrar el valor de una variable del $scope (algo as como el contexto de la
aplicacin)
en
pantalla,
como
si
de
un
template
se
tratara.
Entonces, qu nos permite AngularJS?. Vamos a ver varios ejemplos donde
intentar explicar de pasada los puntos notables del framework. No obstante,
me gustara aclarar un par de conceptos que vais a ver continuamente en los
ejemplos, los scopes y los controllers.

Scopes
Los scopes son los distintos contextos de ejecucin sobre los que trabajan las
expresiones de AngularJS, por ejemplo, cuando referenciamos un atributo del
modelo mediante la directive ng-model, no estamos sino apuntando a un
atributo que contiene el scope sobre el que se est trabajando. En
los scopes se guarda la informacin de los modelos que se representan en la
vista y tambin atributos que se utilizan para manejar la lgica de la misma.

Los scopes se manejan


las directives.

principalmente

desde

los controllers y

desde

Controllers
Los controllers son los encargados de inicializar y modificar la informacin que
contienen losscopes en funcin de las necesidades de la aplicacin.
Tambin podemos declarar funciones en el scope que se podrn utilizar ms
tarde o ser llamadas desde la vista.

Una vez explicado esto, vamos a dar un paseo por las caractersticas de
AngularJS.

Qu ofrece AngularJS?
Client-side template
El sistema de plantillas en AngularJS es diferente del utilizado en otros
frameworks. Por lo general es el servidor el encargado de mezclar la plantilla
con los datos y devolver el resultado al navegador. En AngularJS el servidor
proporciona los contenidos estticos (plantillas) y la informacin que se va a
representar (modelo) y es el cliente el encargado de mezclar la informacin del
modelo
con
la
plantilla
para
generar
la
vista.
En el siguiente ejemplo se puede observar como representamos en AngularJS
una lista de contactos utilizando el motor de plantillas y la directive ng-repeat,
la cual nos permite iterar sobre el array para despus mostrar uno a uno la
informacin de cada elemento contenido en l.

Data binding
Con AngularJS podemos sincronizar el modelo y la vista automticamente
utilizando ciertasdirectives (ng-model en el ejemplo) del framework. Esta
sincronizacin es bidireccional, es decir, la informacin se sincroniza tanto si
cambia el valor en la vista como si lo hace el valor en el modelo.

Directives
Las directives son el plato fuerte de AngularJS. Mediante el uso de las mismas
podemos extender la sintaxis de HTML y darle el comportamiento que
deseemos. Podemos crear directives a nivel de elemento, de atributo, de clase
y
de
comentario.
Un
ejemplo
sera
el
siguiente,
mediante
nuestradirective focusable (una directive a nivel de atributo) podemos
modificar el comportamiento de los elementos input. En este caso cada vez que
el input obtiene o pierde el foco cambia su color de fondo.

Una de las cosas ms interesantes de las directives es la posibilidad de


declararlas a nivel de elemento, lo que nos permite crear nuevas etiquetas de
HTML
que
facilitan
la
creacin
de
componentes
reutilizables.
Vamos a poner un ejemplo rpido, una nueva etiqueta HTML llamada Hello que
ser reemplazada por un botn que al hacer clic sobre l mostrar una alerta.

Filters
Los filters nos permiten modificar el modo en el que se va a presentar la
informacin
al
usuario.
La utilizacin de los mismos es similar a los Pipeline de Unix:
{{ expresion | filtro }}
Donde expresion puede ser cualquier tipo de expresin de AngularJS, como una
variable del $scope, y filtro el nombre del filtro que le queremos aplicar a la
expresin.

En el siguiente ejemplo hemos creado un filtro llamado toUpperCase, el cual


transforma todo el texto recibido de la expresin en maysculas.

Services
Los services son los encargados de comunicarse con el servidor para enviar y
obtener informacin que despus ser tratada por los controllers para
mostrarla
en
las
vistas.
Esta parte es ms compleja de explicar con un ejemplo, por el momento nos
basta
con
saber
que
losservices se
pueden
dividir
en
tres
categoras: services, factories y providers.
Uno de los services incluidos en el framework es $resource, el cual nos permite
encapsular la interaccin con servicios RESTful sin tener que tratar
directamente
con
las
llamadas
http.
Otros services interesantes
que
incluye
AngularJS
son $q y
las
llamadas promises. Mediante este mecanismo podemos realizar acciones
asncronas y devolver valores que puede que an no hayan sido resueltos.
Cuando la accin ha finalizado el valor devuelto, llamado promise, se resuelve
en funcin del resultado de la misma, mientras tanto la ejecucin del programa
sigue su curso.

En principio estos son los principales aspectos de AngularJS, he intentado darle


un enfoque prctico mostrando con ejemplos el potencial de este framework sin
entrar en detalles demasiado tcnicos. En las siguientes entradas ir
profundizando poco a poco en todo lo que esta librera JavaScript puede
ofrecernos.
Por ltimo, si os ha gustado lo que habis visto hasta ahora os recomiendo que
visitis los siguientes enlaces. Espero que os sean de ayuda.

AngularJS (Website oficial, tutoriales y documentacin)


AngularJS - GitHub (Cdigo fuente de AngularJS)
AngularJS - O'Really (Libro escrito por Brad Green y Shyam Seshadri,
ambos colaboradores del proyecto AngularJS)
Recipes with AngularJS - Leanpub (Libro de recetas y tcnicas tiles a la
hora de manejarse con el framework, se va actualizando cada cierto tiempo)
egghead.io (Website de recetas de AngularJS)

Introduccin

Si usted ha odo acerca de Node, o si ha ledo algn artculo destacando lo


increble que es, tal vez se est preguntando "Simplemente qu es Node.js?".
Tal vez usted todava tenga preguntas sobre lo que es Node, despus de leer
su propia pgina principal. Node definitivamente no es para todos los
programadores, pero podra ser la respuesta adecuada para algunos.
Este artculo tratar de responder a los que es Node.js, presentando un breve
contexto de los problemas que resuelve, cmo funciona, cmo ejecutar una
aplicacin simple y, finalmente, dnde Node es una buena solucin. No tratar
cmo escribir una aplicacin Node complicada ni ser un tutorial minucioso
sobre Node. Leer este artculo le ayudar a decidir si debe continuar
aprendiendo sobre Node para utilizarlo en su propio negocio.
Volver arriba
Qu problema resuelve Node?

La meta nmero uno declarada de Node es "proporcionar una manera fcil


para construir programas de red escalables". Cul es el problema con los
programas de servidor actuales? Hagamos cuentas. En lenguajes como Java

y PHP, cada conexin genera un nuevo hilo que potencialmente viene


acompaado de 2 MB de memoria. En un sistema que tiene 8 GB de RAM,
esto da un nmero mximo terico de conexiones concurrentes de cerca de
4.000 usuarios. A medida que crece su base de clientes, si usted desea que su
aplicacin soporte ms usuarios, necesitar agregar ms y ms servidores.
Desde luego, esto suma en cuanto a los costos de servidor del negocio, a los
costos de trfico, los costos laborales, y ms. Adems de estos costos estn
los costos por los problemas tcnicos potenciales un usuario puede estar
usando diferentes servidores para cada solicitud, as que cualquier recurso
compartido debe almacenarse en todos los servidores. Por todas estas
razones, el cuello de botella en toda la arquitectura de aplicacin Web
(incluyendo el rendimiento del trfico, la velocidad de procesador y la velocidad
de memoria) era el nmero mximo de conexiones concurrentes que poda
manejar un servidor.
Node resuelve este problema cambiando la forma en que se realiza una
conexin con el servidor. En lugar de generar un nuevo hilo de OS para cada
conexin (y de asignarle la memoria acompaante), cada conexin dispara una
ejecucin de evento dentro del proceso del motor de Node. Node tambin
afirma que nunca se quedar en punto muerto, porque no se permiten
bloqueos y porque no se bloquea directamente para llamados E/S. Node afirma
que un servidor que lo ejecute puede soportar decenas de miles de conexiones
concurrentes.
Entonces, ahora que usted tiene un programa que puede manejar cientos de
miles de conexiones concurrentes, qu puede usted construir en realidad con
Node? Sera extraordinario si usted tuviera una aplicacin Web que necesitara
de toda esta cantidad de conexiones. Ese es uno de esos problemas del tipo
"si usted tiene este problema, no es un problema". Antes de pasar a ello,
observemos cmo funciona Node y cmo est diseado que se ejecute.
Volver arriba
Lo que Node definitivamente no es

S, Node es un programa de servidor. Sin embargo, el producto base de Node


definitivamente No es como Apache o Tomcat. Esos servidores bsicamente
son productos para servidor listos para instalar y que estn listos para
implementar aplicaciones instantneamente. Usted podra tener un servidor
estar listo y en operacin en un minuto con estos productos. Node

definitivamente no es esto. De forma similar a como Apache puede agregar un


mdulo PHP para permitir a los desarrolladores crear pginas Web dinmicas,
y un mdulo SSL para conexiones seguras, Node tambin tiene el concepto de
mdulos que se pueden agregar a su ncleo mismo. Literalmente hay cientos
de mdulos de los que se puede escoger con Node, y la comunidad es
bastante activa en cuanto a producir, publicar y actualizar docenas de mdulos
por da. Hablaremos sobre toda la parte de mdulos de Node ms adelante en
este artculo.
Volver arriba
Cmo funciona Node

Node ejecuta V8 JavaScript. Espere... qu? JavaScript en el servidor? S,


ley correctamente. El JavaScript del lado del servidor puede ser un concepto
nuevo para cualquiera que haya trabajado exclusivamente con JavaScript del
lado del cliente, pero la idea en s no es tan inverosmil por qu no utilizar
el mismo lenguaje de programacin que usted usa en el cliente del lado del
servidor?
Qu es el V8? El motor V8 JavaScript es el motor JavaScript subyacente que
Google usa con su navegador Chrome. Pocas personas piensan en lo que en
realidad sucede con JavaScript en el cliente. Bien, un motor JavaScript en
realidad interpreta el cdigo y lo ejecuta. Con el V8, Google cre un intrprete
ultra-rpido escrito en C++, con otro aspecto nico: usted puede descargar el
motor e incorporarlo a cualquier aplicacin que desee. No est restringido a
ejecutarse en un navegador. As, Node en realidad usa el motor V8 JavaScript
escrito por Google y le da otro propsito para usarlo en el servidor. Perfecto!
Para qu crear un nuevo lenguaje cuando ya hay una buena solucin
disponible.
Programacin orientada por eventos

A muchos programadores se les ha hecho creer que la programacin orientada


a objetos es el diseo perfecto de programacin y que no deben usar nada
ms. Node utiliza lo que se conoce como modelo de programacin orientado
por eventos.
Listado 1. Programacin orientada por eventos del lado del cliente con jQuery
// jQuery code on the client-side showing how Event-Driven programming works

// When a button is pressed, an Event occurs - deal with it


// directly right here in an anonymous function, where all the
// necessary variables are present and can be referenced directly
$("#myButton").click(function(){
if ($("#myTextField").val() != $(this).val())
alert("Field must match button text");
});

El lado del servidor realmente no es tan diferente del lado del cliente. Es
verdad, no se estn presionando botones, y no se est ingresando texto en
campos, pero a un nivel superior, estn sucediendo eventos. Se realiza una
conexin evento! Se reciben datos a travs de la conexin evento! Se
dejan de recibir datos por la conexin evento!
Por qu este tipo de configuracin es ideal para Node? JavaScript es un gran
lenguaje para programacin orientada por eventos, porque permite funciones y
cierres annimos, y ms importante, la sintaxis es similar para casi cualquier
persona que haya codificado. las funciones de devolucin de llamado que se
llaman cuando ocurre un evento pueden escribirse en el mismo punto en el que
usted captura el evento. Fcil de codificar, fcil de mantener. No hay
infraestructuras complicadas Orientadas a Objeto, no hay interfaces, no hay
potencial para sobre-arquitectura de nada. Simplemente esperar por un evento,
escribir una funcin de devolucin de llamado, y se ha resuelto todo!
Volver arriba
Aplicacin Node de ejemplo

Finalmente vamos a ver algo de cdigo! Reunamos todas las cosas sobre las
que hemos tratado y creemos nuestra primera aplicacin Node. Como hemos
visto que Node es ideal para el manejo de aplicaciones de alto trfico, creemos
una aplicacin Web bastante simple, construida para mxima velocidad. Estas
son las especificaciones para nuestra aplicacin de muestra pasadas por el
"jefe": Cree una API RESTful generadora de nmeros aleatorios. La aplicacin
debe recibir una entrada, un parmetro llamado "number". La aplicacin
retornar un nmero aleatorio que est entre 0 y este parmetro, y retornar
ese nmero generado a quien hizo el llamado. Y, como el "jefe" espera que
esta sea una aplicacin masivamente popular, deber manejar 50.000 usuarios
concurrentes. Observemos el cdigo:
Listado 2. Generador Node de nmeros aleatorios
// these modules need to be imported in order to use them.
// Node has several modules. They are like any #include

// or import statement in other languages


var http = require("http");
var url = require("url");
// The most important line in any Node file. This function
// does the actual process of creating the server. Technically,
// Node tells the underlying operating system that whenever a
// connection is made, this particular callback function should be
// executed. Since we're creating a web service with REST API,
// we want an HTTP server, which requires the http variable
// we created in the lines above.
// Finally, you can see that the callback method receives a 'request'
// and 'response' object automatically. This should be familiar
// to any PHP or Java programmer.
http.createServer(function(request, response) {
// The response needs to handle all the headers, and the return codes
// These types of things are handled automatically in server programs
// like Apache and Tomcat, but Node requires everything to be done yourself
response.writeHead(200, {"Content-Type": "text/plain"});
// Here is some unique-looking code. This is how Node retrives
// parameters passed in from client requests. The url module
// handles all these functions. The parse function
// deconstructs the URL, and places the query key-values in the
// query object. We can find the value for the "number" key
// by referencing it directly - the beauty of JavaScript.
var params = url.parse(request.url, true).query;
var input = params.number;
// These are the generic JavaScript methods that will create
// our random number that gets passed back to the caller
var numInput = new Number(input);
var numOutput = new Number(Math.random() * numInput).toFixed(0);
// Write the random number to response
response.write(numOutput);
// Node requires us to explicitly end this connection. This is because
// Node allows you to keep a connection open and pass data back and forth,
// though that advanced topic isn't discussed in this article.
response.end();
// When we create the server, we have to explicitly connect the HTTP server to
// a port. Standard HTTP port is 80, so we'll connect it to that one.
}).listen(80);
// Output a String to the console once the server starts up, letting us know everything
// starts up correctly
console.log("Random Number Generator Running...");

Iniciando esta aplicacin

Ponga el cdigo anterior en un archivo llamado "random.js". Ahora, para


comenzar esta aplicacin y ejecutarla (creando as el servidor HTTP y
escuchando las conexiones en el puerto 80), simplemente corra el siguiente

comando en su prompt de comandos: % node random.js. As es como se ver


cuando usted sepa que el servidor estar listo y en funcionamiento.
root@ubuntu:/home/moila/ws/mike# node random.js
Random Number Generator Running...

Accediendo a la aplicacin

La aplicacin est lista y funcionando. Node est escuchando a cualquier


conexin en este momento, as que vamos a probar la aplicacin. Como hemos
creado una API RESTful simple, podemos accesar a la aplicacin usando
nuestro navegador Web. Digite la siguiente direccin (asegrese de haber
completado el paso anterior), http://localhost/?number=27.
La ventana de su navegador cambiar a un nmero aleatorio entre 0 y 27.
Presione recargar en su navegador y obtendr otro nmero aleatorio. Listo,
esta es su primera aplicacin Node!
Volver arriba
Node, para qu sirve?

Entonces, despus de leer todo sobre Node, usted tal vez pueda responder la
pregunta "Simplemente qu es Node?" pero usted puede quedar con la duda
sobre "En qu puedo utilizar Node?" Esa es una pregunta importante ya que
hay algunas cosas para las que Node es realmente bueno.
Para qu sirve

Como ha visto hasta ahora, Node est extremadamente bien diseado para
situaciones en que usted est esperando una gran cantidad de trfico y donde
la lgica del lado del servidor y el procesamiento requeridos, no sean
necesariamente grandes antes de responder al cliente. Aqu hay algunos
buenos ejemplos en donde Node hara un gran trabajo:

Una API RESTful


Un servicio Web que proporcione una API RESTful toma algunos
parmetros, los interpreta, arma una respuesta y descarga esa
respuesta (usualmente una cantidad relativamente pequea de
texto) de vuelta al usuario. Esta es una situacin ideal para Node,
porque puede construirse para que maneje decenas de miles de

conexiones. Tampoco requiere una gran cantidad de lgica y


bsicamente slo busca valores de una base de datos y los rene
como una respuesta. Como la respuesta es una pequea cantidad
de texto y la solicitud entrante es una pequea cantidad de texto, el
volumen de trfico no es alto, y una mquina probablemente puede
manejar las demandas de API de incluso la API de la ms ocupada
de las empresas.

Fila de Twitter
Piense en una compaa como Twitter que recibe tweets y los
escribe en una base de datos. Literalmente hay miles de tweets
llegando cada segundo y la base de datos posiblemente no puede
seguir el ritmo del nmero de escrituras necesarias durante los
horarios pico de uso. Node se convierte en una pieza clave de la
solucin a este problema. Como hemos visto, Node puede manejar
decenas de miles de tweets entrantes. Luego puede escribirlos
rpida/fcilmente en un mecanismo de cola en memoria
(memcached, por ejemplo), desde donde otro proceso separado
puede escribirlos en la base de datos. El rol de Node en esto es
reunir rpidamente el tweet y pasar esta informacin hacia otro
proceso responsable de escribirlo. Imagine otro diseo un
servidor PHP normal que intente manejar escrituras en la base de
datos misma cada tweet podra causar una pequea demora
mientras se escribe en la base de datos, dado que el llamado de
base de datos estara bloqueando. Una mquina con este diseo
slo podra manejar 2.000 tweets entrantes por segundo, debido a
la latencia de base de datos. A un milln de tweets por segundo,
usted estara hablando de 500 servidores. Node, en cambio, maneja
cada conexin y no causa bloqueo, permitindole capturar tantos
tweets como se le puedan arrojar. Una mquina nodo capaz de
manejar 50.000 tweets por segundo, y usted estara hablando de
slo 20 servidores.

Estadsticas de videojuegos
Si usted alguna vez jug un juego como Call of Duty on-line,
algunas cosas le habrn llamado la atencin inmediatamente
cuando observ las estadsticas del juego, principalmente el hecho

de que deben estar rastreando toneladas de informacin sobre el


juego para poder producir tal nivel de estadsticas. Luego,
multiplique esto por los millones de personas que lo juegan en
cualquier momento, y tendr una idea de la inmensa cantidad de
informacin que se genera con bastante rapidez. Node es una
buena solucin para este escenario, porque puede capturar los
datos que estn generando los juegos, hacer un mnimo de
consolidacin con ellos y luego ponerlos en una fila para escribirlos
en una base de datos. Parecera algo tonto dedicar todo un servidor
a rastrear cuntas balas disparan las personas en los juegos, lo
cual podra ser el lmite til si usted utilizara un servidor como
Apache, pero parecera menos tonto si en lugar de ello usted
pudiera dedicar un solo servidor a rastrear casi todas las
estadsticas de un juego, como usted puede llegar a hacerlo con un
servidor que ejecute Node.
Volver arriba
Mdulos Node

Aunque originalmente no era un tema planeado en el artculo, debido a la


demanda popular, el artculo se ha expandido para incluir una breve
introduccin a los Node Modules y al Node Package Manager. As como a lo
que las personas se han acostumbrado al trabajar con Apache, usted puede
expandir la funcionalidad de Node instalando mdulos. No obstante, los
mdulos que usted puede utilizar con Node mejoran en gran medidael
producto, tanto, que es poco probable que haya alguien que utilice Node sin
instalar por lo menos algunos mdulos. As de importantes se han tornado los
mdulos, hasta el punto de convertirse en parte esencial del producto
completo.
En el aparte de Recursos, incluyo un enlace a la pgina de mdulos, donde
estn listados y disponibles todos los mdulos posibles. Como una muestra
rpida de las posibilidades, estos incluyen un mdulo para escribir pginas
creadas dinmicamente (como PHP), un mdulo para facilitar el trabajo con
MySQL, un mdulo para ayudar con WebSockets, y un mdulo para asistir en
el anlisis de texto y de parmetros, entre docenas de mdulos disponibles. No
entrar en detalles sobre los mdulos, porque como mencion, este slo es un
artculo de visin general que le ayuda a entender si Node es algo que usted

debera buscar ms adelante, pero es posible, si decide utilizarlo ms adelante,


que definitivamente tambin vaya a trabajar con los mdulos disponibles.
Adicionalmente, Node presenta el Node Package Module, que es una forma
integrada de instalar y administrar los mdulos Node que est usando. Este
maneja automticamente dependencias, de manera que usted puede estar
seguro(a) de que cualquier mdulo que usted desee instalar se instalar
correctamente con todas sus partes necesarias. Tambin sirve como una forma
para publicar sus propios mdulos en la comunidad Node, si usted opta por
vincularse y escribir su propio mdulo. Piense en el NPM como una forma fcil
para expandir la funcionalidad de Node sin tener que preocuparse por
desconfigurar su instalacin Node. De nuevo, si usted opta por continuar
avanzando en Node, el NPM ser parte vital de su solucin Node.
Volver arriba
Conclusin
Nota del Editor

La versin inicialmente publicada de este artculo gener bastantes


comentarios por parte de la comunidad, sobre los diferentes puntos que se
presentaron. Desde ese entonces el autor ha revisado este artculo con esas
ideas en mente. Este tipo de revisin y discusin por lo pares es parte vital del
mundo de fuente abierta. Gracias a aquellos(as) que aportaron sus
comentarios constructivos.
Como todos los proyectos de fuente abierta, Node.js continuar evolucionando
y los desarrolladores descubrirn nuevos recursos y tcnicas para superar
cualquier nmero de limitaciones. Como siempre, alentamos a nuestros
usuarios a que prueben la tecnologa por s mismos.
La pregunta que muchos de ustedes tenan al comienzo de este artculo
"Simplemente qu es Node.js?" debera quedar respondida despus de leerlo.
Usted debe poder explicar en unas pocas frases sencillas y concisas lo que es
Node.js. Si usted puede hacerlo, entonces estar un paso adelante de casi
cualquier otro programador. Muchas personas con las que he hablado sobre
Node han estado confundidas con respecto a lo que hace exactamente. Ellas
estn, y es comprensible, pensando en modo Apache ( un servidor es una
aplicacin en la que usted descarga sus archivos HTML y todo funciona). Como

la mayora de los programadores estn acostumbrados a Apache y a lo que


hace, la forma ms fcil de describir Node es comparndolo con Apache. Node
es un programa que puede hacer todo lo que hace Apache (con algunos
mdulos), pero que tambin puede hacer mucho ms, al ser una plataforma
JavaScript extensible desde la cual usted puede construir.
En este artculo usted ha visto cmo Node cumple con sus metas de
proporcionar servidores altamente escalables. Utiliza un motor JavaScript
extremadamente rpido de Google, el motor V8. Utiliza un diseo Orientado por
Eventos para mantener el cdigo al mnimo y fcil de leer. Todos estos factores
conducen a la meta deseada por Node es relativamente fcil escribir una
solucin masivamente escalable.
Tan importante como entender lo que Node es, tambin es importante entender
lo que Node no es. Node no es simplemente un reemplazo de Apache que
instantneamente vaya a hacer ms escalable su aplicacin Web PHP. Eso no
podra estar ms lejos de la verdad. Todava es muy temprano en la vida de
Node, pero est creciendo extremadamente rpido, la comunidad est
involucrada muy activamente, se est creando una gran cantidad de mdulos, y
este producto en crecimiento podra estar en su negocio dentro de un ao.

Qu es AngularJS?

AngularJS es un framework MVC de cdigo abierto desarrollado por Google y


escrito en Javascript, que trabaja del lado del cliente (client-side) y nos permite
hacer ms dinmica nuestra aplicacin web, trabajando de la mano con otras
tecnologas como HTML y CSS, as como libreras de terceros.
El equipo de AngularJS lo define como:
un framework estructural para pginas web dinmicas.
Porqu un Framework?

Un framework nos permite estructurar, organizar y escribir cdigo de una


manera ms eficiente y en menos tiempo, hacindolo ms rpido de acuerdo a
la manera en la que evolucionan los motores de render de los navegadores.
Esto significa, entre ms poderoso y eficiente un navegador web, aplicaciones
web ms rpidas e intuitivas se necesitan.

Un framework trabaja con el patrn MVC (Modelo, Vista, Controlador), lo que


permite separar correctamente la lgica, el modelo de datos y la vista en una
aplicacin web y se enfoca en extender el vocabulario HTML.
AngularJS permite realizar aplicaciones de tipo SPA (Single Page
Applications), lo que significa que podemos construir una aplicacin web en
donde una parte de la misma cargue dinmicamente, sin que se tenga que
recargar todo la pgina. Esto permite hacer una aplicacin web ms rpido y
fcil. Tambin se puede realizar aplicaciones ms complejas, pero eso lo
explicaremos ms adelante.
AngularJS permite hacer web apps increblemente dinmicas, y puedo
comentarles que con este framework es ms que suficiente, refiriendome a que
podemos prescindir de otras libreras como jQuery.
En los siguientes tutoriales ampliaremos ms el significado y uso de
este framework.

Vous aimerez peut-être aussi