Mean Stack
Mean Stack
Mean Stack
stack o compilación de estas tecnologías para desarrollar aplicaciones web usando como único
lenguaje de programación javascript en el servidor, en el cliente y en la base de datos.
Y es que la omnipresencia del javascript en las aplicaciones web se ha hecho notar en los
últimos años. Es un lenguaje de programación fácil, versátil y adaptable a todas las
plataformas. El perfil del programador que domina MEAN es cada vez más necesitado en las
empresas, ya que es capaz de hacer frente a tareas de diferentes campos.
Allá por el año 1995, Brendan Eich que trabajaba por aquel entonces en Netscape, creó un
lenguaje llamado Mocha que fue renombrado varias veces hasta quedar en JavaScript.
En primer lugar y, a pesar del halo de modernidad que rodea a todo lo que lleva JavaScript en
el lado del servidor, ya en su nacimiento, se lanzó una implementación con Netscape
Enterprise Server. Poco después de su nacimiento fue estandarizado bajo el nombre
ECMAScript. Con esto podemos entender que JavaScript es una implementación de
ECMAScript. La última versión de ECMAScript es la 6, que la veremos referida como ES6
(deprecated) o ES2015, incluso leeremos referencias que hablan de JavaScript 6. Podemos
decir que ES2015 es el lenguaje, y JavaScript o JScript, los dialectos.
Con una especificación HTML, en aquella época limitada en lo que a la interacción con el
usuario se refiere, JavaScript se convirtió en aquello que especiaba las páginas web con efectos
e interacciones.
Node.js
Tiene un único hilo de ejecución que permite solicitudes asíncronas. Esto, sumado al excelente
modelo de eventos de JavaScript, hace que Node.js gestione la memoria de manera eficiente.
En servidores basados en lenguajes como Java o PHP, cada solicitud a este genera un nuevo
hilo que suele ir acompañado de unos 2MB de memoria. En sistemas con una memoria de 8GB
de RAM estos lenguajes permiten, teóricamente, alrededor de 4000 usuarios conectados al
mismo tiempo. A medida que una aplicación web cuyo servidor es ejecutado en un entorno de
estos lenguajes crece, la única manera que tiene de poder soportar más usuarios es
incrementando el número de servidores.
Node.js soluciona este problema, proporcionando una manera fácil de crear aplicaciones web
escalables. En lugar de crear un hilo por cada nueva solicitud al servidor y asignarle la memoria
comentada anteriormente, cada conexión dispara un evento dentro del hilo de ejecución
asíncrono de Node.js. Esto le permite soportar decenas de miles de conexiones concurrentes.
No solo gestiona de manera eficiente la memoria, también consigue que las aplicaciones web
se ejecuten más rápido. Nunca entra en punto muerto y es un entorno no bloqueante. Al
poder ejecutar varias solicitudes concurrentemente, las aplicaciones ejecutadas en Node.js
pueden llegar a ser hasta 10 veces más rápidas.
En otros entornos en los que se utilizan servidores como Apache o Tomcat, existe una
jerarquía específica de carpetas en las que se despliegan las aplicaciones, además de ficheros
de configuración muy concretos.
Hay que destacar la flexibilidad que brinda Node.js en ese aspecto, pues permite lanzar el
número de servidores que el desarrollador desee y en el directorio que vea más práctico.
Node.js contiene, por defecto, ciertos módulos con los que es posible crear una aplicación
completa.
Express
Una vez incorporado al proyecto con la sentencia “require”, se crea la aplicación, normalmente
denominada app, con la función “express()”. Para que el servidor se lance al iniciar el proyecto
en Node.js se utiliza el método “listen()”, que equivale al método “createServer()” del módulo
nativo HTTP.
Mongo
MongoDB es una base de datos NoSQL especialmente útil en aplicaciones escalables. Permite
que los esquemas cambien rápidamente cuando las aplicaciones empiezan a crecer.
Utiliza el estándar JavaScript Object Notation, o JSON, para la manipulación de datos; lo cual es
importante ya que MEAN busca una comunicación sencilla entre cliente y servidor a la hora de
tratar con los datos.
Para manipular los datos en la API de un proyecto MEAN es necesario incorporar mongoose,
un módulo externo instalado desde el gestor de paquetes NPM.
El componente más importante de Mongoose es el esquema. Cada uno de ellos está asociado
a una colección de MongoDB y define el formato de los objetos dentro de esa colección.
Un esquema está formado por claves, y cada clave define una de las propiedades de los
objetos de una colección. Los tipos, o SchemaTypes, permitidos son:
String
Number
Date
Buffer
Boolean
Mixed
ObjectId
Array
Una vez se completen ciertas funcionalidades de una aplicación web, como puede ser el
registro de usuarios, es muy común crear funciones o requisitos que comprueben el formato o
características de los formularios recibidos antes de que estos sean guardados en la base de
datos. Que las contraseñas tengan una longitud máxima o que los nombres de usuario no
contengan caracteres especiales son reglas simples que pueden ayudar a mantener una base
de datos limpia y más legible.
Lo habitual es realizar estas comprobaciones desde el propio cliente, pero, si de alguna forma
el usuario consigue eludir las funciones JavaScript que lleven a cabo esas comprobaciones, la
base de datos queda expuesta a recibir datos de todo tipo que puedan ser incompatibles con
la API incorporada.
Mongoose incorpora un tipo de middleware que permite llevar a cabo, desde la propia API,
estas comprobaciones antes de que los datos sean guardados. Este middleware son los
validadores.
VALIDADORES NATIVOS
Todos los SchemaType poseen el validador “required”, que comprueba que la clave
sea proporcionada en el tratamiento de los datos.
Los SchemaType de tipo Number contienen los validadores “min” y “max”, que
comprueban que la clave a tratar contenga un valor mínimo o máximo establecido.
Los SchemaType de tipo String contienen los validadores “minlength” y “maxlength”,
que comprueban que la clave a tratar contenga un número de caracteres mínimo o
máximo establecido.
VALIDADORES PERSONALIZADOS
Si los validadores nativos no son suficientes para los requisitos de una aplicación web,
mongoose permite al desarrollador crear validadores personalizados a través de la opción
“validate”.
Angular
La creación de una aplicación web SPA es una tarea bastante complicada si se crea a mano
desde cero. Hay muchos ficheros y carpetas necesarios que son muy parecidos entre ellos, por
lo que un enfoque muy útil es conseguir un esqueleto inicial de una aplicación web SPA.
Para obtener uno de estos esqueletos se pueden usar generadores, como pueden ser los
basados en Yeoman; proyectos semilla disponibles en github; o una herramienta oficial de
gestión de proyectos.