# MEAN

MEAN Stack (acrónimo para MongoDB, Express.js, AngularJS o Angular, Node.js) es un framework o conjunto de subsistemas de software para el desarrollo de aplicaciones y páginas web dinámicas que están basadas, cada una de estas, en el lenguaje de programación JavaScript. Gracias a esta característica el conjunto se integra exitosamente en una plataforma autosuficiente.

## Componentes

Cada subsistema del Mean stack es de código abierto y de uso gratuito. Los componentes son los siguientes:
MongoDB: es un sistema de base de datos NoSQL que almacena los datos en estructuras o “documentos”. Estos están definidos con la notación JSON (notación simple de objeto tipo JavaScript), lo que permite una rápida manipulación y transferencia de los datos. La mayor característica de esta plataforma es su escalabilidad, lo que significa que puede aumentar en forma considerable la cantidad de datos que almacena sin que esto afecte su funcionamiento en general.
Un ejemplo de un documento en JSON es:
Express.js: es un módulo de Node.js y, como tal, funciona sobre esta plataforma. Ofrece los métodos suficientes en JavaScript para poder manejar las solicitudes o peticiones que se hacen por medio de los métodos del protocolo HTTP (GET, POST, etc.). También presenta un sistema simple de enrutamiento, que dentro del MEAN stack es aprovechado en el back-end o en el lado del servidor:
Donde:
* app es una instancia de express.
* METHOD es un método de solicitud HTTP.
* PATH es una vía de acceso en el servidor.
* HANDLER es la función que se ejecuta cuando se correlaciona la ruta.
AngularJS: es un framework que facilita la manipulación del DOM ('Modelo de Objetos del Documento' o 'Modelo en Objetos para la Representación de Documentos') y, por lo tanto, en el MEAN stack es la plataforma que se usa para trabajar en el front-end. Permite crear una gran variedad de efectos de una forma sencilla, reduciendo la cantidad de código y haciéndolo mucho más sencillo de mantener. Un ejemplo de angular básico es:
En este ejemplo el "input" queda enlazado a la etiqueta H1 y todo lo que pasa en el primero sucede en el segundo.
Angular también tiene la capacidad de hacer el enrutamiento del sistema e incorpora la función de Ajax (JavaScript asincrónico y XML), para hacer peticiones al servidor sin tener que cargar toda la página.
Node.js: es el último componente en el acrónimo, pero de hecho es la base de todo el conjunto. Es la plataforma encargada del funcionamiento del servidor. Utiliza básicamente JavaScript, un lenguaje del lado del cliente cuyo uso se ha ampliado considerablemente en programación de back-end.

## Historia

Desarrollado por el programador web israelí Amos Haviv en colaboración con la compañía israelí Linnovate, el concepto surgió según el mismo Amos Haviv al notar una tendencia en sus clientes a integrar lo subsistemas fundamentados en JavaScript, MongoDb, Nodejs y ExpressJS en el back-end y Angular para manejar el front-end. Según Amos Haviv, en una exploración por Internet para saber si alguien más había propuesto la integración de estas plataformas se topó con el Acrónimo “MEAN” en un blog escrito por Valeri Karpov.
Tiempo después es contactado por Linnovate para trabajar en un nuevo proyecto, que consistía, según Amos Haviv, en una "variación desorganizada" que Linnovate había heredado de otra compañía. Amos Haviv le presentó a Linnovate su propia versión y juntos desarrallon "Mean.io” (Mean.io).
En última instancia, Amos Haviv abandonó su colaboración con Linnovate, al parecer por diferencias entre las intenciones e ideas que tenía cada parte con respecto al proyecto. Aun así, como Amos Haviv está muy comprometido con la idea de "MEAN", decidió crear Mean.js como alternativa a Mean.io, pero con unas marcadas diferencias: mientras que Mean.io es desarrollado y mantenido por Linnovate y sus empleados de forma exclusiva, Mean.js es mantenido y desarrollado por una comunidad de expertos y aficionados por medio de Internet. Por otro lado, mientras que Mean.io tiene su propio sistema generador y administrador de aplicaciones denominado mean command, Mean.js utiliza Yeoman Generator.

## Herramientas Complementarias

* Mongoose - El controlador para mongodb-node.js encargado de proveer un elegante modelado de objetos para Node.js.
* Passport - Un middleware de autenticación para Node.js que permite autenticación usando usuario y contraseña con Facebook, Twitter, etc.
* Twitter Bootstrap - Popular framework responsive que integra HTML, CSS, y JavaScript para el desarrollo de proyectos adaptables a diferentes medios de reproducción.
* UI Bootstrap - Componentes Bootstrap escritos solamente en AngularJS.