Está en la página 1de 7

INTRODUCCIN AL STACK MEAN Y SUS COMPONENTES:

MONGODB, EXPRESS, ANGULARJS Y NODEJS

INTRODUCCIN
Node es un apasionante lenguaje JavaScript para desarrolladores web que ha ido
ganando popularidad en los ltimos aos. Empez usndose en pequeos proyectos o
medianas empresas y ahora puede verse en grandes compaas como Microsoft, eBay,
LinkedIn, Yahoo, WalMart, Uber, Oracle, y muchos ms.

POR QU MEAN?
El stack MEAN usa cuatro componentes de software, MongoDB, ExpressJS, AngularJS y
NodeJS. Estas cuatro herramientas juntas permite a los desarrolladores crear aplicaciones
de forma eficiente, bien estructurada y rpida. Todos los componentes del stack usan
JavaScript, usando para todo este lenguaje podemos hacer cosas cosas como:
Usar JavaScript del lado del servidor (Node y Express)
Usar JavaScript en el lado del cliente (Angular)
Almacenar objetos JSON en MongoDB
Usar los objetos JSON para transferir datos fcilmente de la base de datos al servidor y
del servidor al cliente
El hecho de usar un solo JavaScript como lenguaje aumenta la productividad. Los
desarrolladores del lado del cliente que trabajan con Angular pueden entender fcilmente
la mayora del cdigo del lado del servidor y viceversa.
En la base de datos almacenamos informacin como formato JSON. Despus podemos
escribir queries JSON (peticiones) en nuestro servidor Node y enviar estas peticiones
directamente a nuestro front-end usando Angular. Esto es especialmente til cuando
tienes a varios desarrolladores trabajando en un proyecto. El cdigo del lado del servidor
es ms legible por los desarrolladores front-end y viceversa.
La facilidad de desarrollo ser mucho ms evidente una vez empezamos a indagar en
ejemplos y con suerte os salve a tu equipo y a ti de algunos quebraderos de cabeza en el
futuro.

CUNDO USAR EL STACK MEAN


Los beneficios del stack MEAN provienen de la robustez de Node. Node nos proporciona
su API abierta en real-time (tiempo real) la cual podemos usar libremente con nuestro
cdigo frontend en Angular. Podemos usarlo para transferir datos para aplicaciones como

chats, actualizacin de estados, o cualquier otra situacin que requiera mostrar datos
rpidamente en tiempo real:
Chat
Actualizacin de estados en tiempo real por el usuario (como Twitter)
RSS feed
Tienda online
Polling app (aplicacin para votaciones)

CUANDO NO USAR EL STACK MEAN


Como pasa con cualquier otro lenguaje o grupo de lenguajes, hay muchas situaciones en
las que usar MEAN podra no ser lo ms adecuado y esto es muy importante saberlo
antes de meternos de lleno a programar. Muchos de los beneficios del stack MEAN y las
razones por las cuales deberas usarlo van enlazadas al uso de Node.
Node por lo general no es la mejor eleccin para tareas intensivas de CPU. Ha
habido algunos casosdonde Node en efecto ha ido bien con aplicaciones pesadas, pero
como principiante es mejor alejarse de Node si sabes que tu aplicacin requiere de
mucha CPU.

QUIN USA MEAN?


Muchos desarrolladores han estado rezando por la llegada del Stack MEAN. Este stack usa
JavaScript para todas sus operaciones, lo que lo hace atractivo para los desarrolladores
que quieren crear un proyecto de forma fluida.
Algunas de las grandes compaias ya han cosechado beneficios y han integrado Node en
varias de sus operaciones:

Walmart: Walmart empez usando Node.js en 2012 para dar a


los usuarios de mvil una moderna experiencia front end.
Haciendo uso de la plataforma JavaScript, fueron capaces de
integrar de forma rpida y sencilla sus APIs existentes con su aplicacin Node. Declararon
que el 53% del trfico online de su Black Friday iba a sus servidores Node con 0 de
inactividad.
Yahoo!: Yahoo empez experimentando con Node en 2010. Al
principio lo usaban para pequeas tareas como subir archivos, y
ahora usan Node para controlar casi 2 millones de peticiones por minuto. Han notado un
incremento en la velocidad y una simplificacin en el proceso de desarrollo.

LinkedIn: LinkedIn empez a desarrollar el lado del servidor de


su app mvil totalmente con Node. Antes usaban Ruby, pero
desde que cambiaron han visto un enorme incremento en
rendimiento, en un rango de 2 a 10 veces ms rpido.
Paypal: Paypal recientemente se ha subido a bordo de Node y
empieza a migrar su cdigo Java a Node. Empezaron
experimentando solo con la pgina de Account Overview, pero una
vez vieron que la velocidad se increment en un 35% y el coste de desarrollo se redujo a
la mitad, empezaron a pasar todo el sitio a Node.js.
Y muchas empresas ms en la pgina Node Industry.

PRIMER VISTAZO
Vamos a echar un vistazo rpido a las tecnologas que usaremos. Recuerda, esta serie de
tutoriales estn destinados a ensear
cmo todas estas piezas trabajan juntass, as que no va a meternos en las tcnicas ms
avanzadas
y conceptos de cada uno. Dejar enlaces a ms recursos para complementar los
conocimientos adquiridos en cada seccin.
MongoDB, llamado as por la palabra humongous, es una
base de datos de cdigo abierto NoSQL, base de datos que
almacena documentos en formato JSON. Se sita lder de las
bases de datos NoSQL, segn el estudio a partir del nmero
de bsquedas en Google y demandas en ofertas de trabajo.
Mongo vs MYSQL
LAMP, que usa MYSQL, ha sido el stack lider durante varios aos hasta ahora. MYSQL es
clasificado como una base de datos relacional.

Base de datos relacional. Los datos se almacenan en tablas que no solo


contienen datos, sino que tambin establecen las interconexiones (relaciones) con
otros datos (que estn guardados en otras tablas) en la base de datos.
Bases de datos documentales
Las bases de datos de MongoDB, por otro lado, son clasificadas como una base de datos
no relacional, ms concretamente una document-oriented database (base de datos
orientada a documentos). Esto significa que defines tu estructura de datos como quieras.
Gestiona datos semiestructurados, es decir, documentos. Luego puedes coger estos
datos para combinarlos con tu aplicacin y sus requisitos funcionales. Tambin puedes
fcilmente tomar objetos complejos e insertarlos en tu base de datos usando en tu base
de datos usando JSON, XML, BSON, u otros formatos similares que se adapten mejor a tu
aplicacin. En resumen, estos datos son almacenados en los formatos citados
anteriormente. Incluso puedes guardar documentos PDF en ciertas bases de datos
documentales si se da el caso.

Base de datos orientada a documentos: Un tipo de base de datos NoSQL que


almacena y recupera datos en documentos semiestructurados (en lugar de las
tablas de los bases de datos relacionales).
Los modelos de datos en MongoDB son extremadamente flexibles. Una de las formas de
almacenar datos es creando documentos y creando referencias para relacionar los datos.
Puedes ver debajo que la ficha de informacin de nuestro Hobbit contiene informacin
que podemos referenciar con el Hobbit Address Document:

Node.js esta basado en el motor V8 de Javascript de Google


Chrome y juega su papel en el lado del servidor dentro de
nuestra aplicacin con MEAN. Este motor est diseado para
correr en un navegador y ejecutar el cdigo de Javascript de
una forma extremadamente rpida. Qu significa esto? En
un stack LAMP tienes tu servidor web (Apache, Nginx, etc)
corriendo con un lenguaje de script del lado del servidor (PHP, Perl, Python) para crear un
sitio web dinmico. El cdigo del lado del servidor se usa para crear el entorno de la
aplicacin extrayendo datos de la base de datos (MYSQL) y despus es interpretado por
el servidor para producir la pgina web. Cuando se hace la peticin de una nueva
conexin, Apache crea un nuevo thread (hilo) o proceso para controlar esta peticin,
haciendo que sea multitarea (multihilo). A menudo tendrs un nmero de procesos hijos
inactivos en espera para ser asignados a una nueva peticin. Si configuras el servidor
para tener a solo a 50 procesos hijos inactivos y entran 100 peticiones, algunos
usuarios pueden pasar por un tiempo de espera de conexin hasta que varios de esos
procesos se liberen.
Por supuesto, hay formas ms eficientes de controlar esta escalabilidad, pero
generalmente Apache usa un hilo por peticin, as para soportar a ms y ms usuarios
con el tiempo necesitars ms y ms servidores.

El multiprocesamiento o multihilo (en ingls multithreading) es un modelo de


programacin donde el flujo del programa tiene varios hilos en ejecucin.
Diferentes partes del programa (hilos, threads) son capaces de ejecutarse
simultneamente e independientemente, en vez de esperar a que cada evento se
finalice. Es bueno para que el usuario no tenga que esperar a que cada evento
termine para ver alguna accin, pero cada nuevo thread o hilo consume ms
memoria y necesita su propia pila (o stack) donde almacenar variables locales,
as se compensa la ganancia de rendimiento por un consumo mayor de memoria.
Aqu es donde destaca Node.js. Node es un lenguaje de programacin orientado a
eventos que juega el mismo papel que Apache. Interpreta el cdigo del lado del cliente
para producir la pgina web. Son similares en que cada conexin dispara un nuevo
evento, pero la principal diferencia viene del hecho de que Node es asncrono y de un
nico hilo en ejecucin. Una aplicacin para Node se programa sobre un solo hilo, con
el que controla todas las peticiones.
Utiliza un modelo I/O (entrada/salida) orientado a eventos y basado en el no-bloqueo,
que lo hace ligero y eficiente.

Si en la aplicacin existe una operacin bloqueante (I/O), Node.js crea entonces otro hilo
en segundo plano, pero no lo hace por cada conexin, como hara un servidor web como
por ejemplo Apache.

Programacin orientada a eventos. El flujo de un programa se controla por una


serie de eventos concretos (clicks del ratn, mensajes entrantes, teclas pulsadas,
etc). En la mayora de las GUIs (graphical user interface) hay eventos y esta
tcnica de programacin se puede implementar en cualquier lenguaje.

Programacin asncrona. En la programacin asncrona o no bloqueante los


eventos se ejecutan independientemente del flujo principal del programa (la
secuencia de ejecucin de instrucciones en un programa) y no bloqueamos la
ejecucin. En lugar de no hacer nada a la espera de que suceda un evento, el
programa pasa un evento a la cola y contina con la ejecucin. Una vez el evento
est listo, el programa lo devolver con un callback (nos ayuda a retornar el
resultado cuando est listo), ejecuta el cdigo, y despus vuelve al flujo principal.
Por eso un programa asncrono no corre en el tpico orden de arriba a abajo que
solemos ver en los programas sncronos.
Digamos por ejemplo que entra una consulta de la base de datos. Dependiendo del
tamao de la consulta, podra tardarse un par de segundos en devolver algo. Dado que
solo hay un thread/hilo, puede parecer que no se puede procesar nada ms mientras la
consulta se est ejecutando. Esto dara como resultado tiempos de carga lentos para tus
usuarios y que puede costarle el xito a tu sitio web. Afortunadamente Node maneja
multiples peticiones de forma elegante usando callbacks.

Callbacks asncronos. Una funcin que es pasada como parmetro para ser
ejecutada ms adelante (cuando este lista). Los callbacks se usan cuando una
funcin necesita ms tiempo para ejecutarse para devolver los valores correctos.
Es una forma de decirle a tu programa cuando hayas terminado con esto, haz
todo esto.

EXPRESSJS
Express es una plataforma ligera para construir aplicaciones web usando NodeJS. Nos
ayuda a organizar las aplicaciones web en el lado del servidor. En la web de ExpressJS, lo
describen comoun framework de desarrollo de aplicaciones web minimalista y flexible
para Node.js.
Express esconde muchas funcionalidades internas de Node, lo que te permite sumergirte
en el cdigo de tu aplicacin y conseguir tus objetivos de forma muy rpida. Es fcil de
aprender y te deja cierta flexibilidad con su estructura.

Por algo es el framework ms popular de Node. Algunos nombres destacados que usan
Express son:

MySpace

LinkedIn

Klout

Segment.io
Y muchos ms en esta lista.
De entre tantas cosas que puede hacer este framework, podemos destacar:

Router

Manejo de peticiones

Configuracin de la aplicacin

Middleware
No te preocupes si estos trminos son nuevos para ti, a medida que avancemos en los
tutoriales profundizaremos en cada uno de estos componentes, los aprenderemos y los
usaremos.

Angular, creado por Google, es un framework de JavaScript MVC


para el desarrollo front end de forma rpida y dinmica.
Permite extender el vocabulario de tu HTML con directivas y atributos para crear
componentes dinmicos. Si alguna vez has hecho una pgina web dinmica sin Angula te
habrs dado cuenta de ciertas complicaciones frecuentes, como el data binding,
validacin de formulario, manejador de eventos con DOM (Document Object Model) y
otras muchas. Angular presenta una solucin todo-en-uno a esos problemas.
La curva de aprendizaje para Angular es muy pequea, lo que explica que mucha gente
se este pasando a este framework. La sintaxis es simple y sus principios bsicos como el
data binding (vinculacin de elementos de nuestro documento HTML con nuestro modelo
de datos) y la inyeccin de dependencias son sencillas de pillar con unos cuantos
ejemplos, que por supuesto haremos en estos tutoriales.
Los dos puntos fuertes de Angular son el data binding y la inyeccin de dependencias:

DATA BINDING
Si vienes del pas de jQuery, estars familiarizado con el uso de selectores CSS para
acceder al DOM. Cada vez que quieras obtener el valor de un input, necesitas usar $
(input).val();. No digo que este mal, pero cuando tienes aplicaciones grandes con
muchos input boxes, llega a ser un tanto tedioso controlarlo.
Con Angular se ha eliminado la manipulacin del DOM y al ser modelo MVC (model-viewcontroller) tus datos estn en un lugar. Mediante el data binding, la vista (archivos HTML)
se actualizar automticamente cada vez que el modelo cambie y viceversa.