lunes, 28 de julio de 2014

Aplicación Modelo/ Vista/ Controlador con Node.js, Express, Mysql, Bootstrap


1 Sobre la aplicación

Para probar y adquirir conocimientos me he propuesto realizar una aplicación con Node.js para afianzar cosas que no me quedaban claras.
Si bien, existen muchos materiales y maneras de estructurar las aplicaciones Node.js, he utilizado como base una estructura sugerida por el tutorial http://teknosains.com/i/contoh-modular-nodejs-dan-bootstrap-source-code-inside

1.1 Características implementadas

La aplicación cuenta con las siguientes funciones, he agregado funcionalidades y actualmente sigue en desarrollo:
Acceso por contraseñas a la aplicación.
  • Módulo DashBoard.
  • ABM de usuarios.
  • ABM de grupos.
  • ABM de módulos.
  • ABM de vinculación de módulos y grupos.
  • Módulo ejemplo de APIS por método GET
  • Implementación de permisos para accesos a módulos.

1.2 Para implementar

Existen detalles que no se han trabajado, los archivos podrán servir de ejemplos para cualquiera que desee continuarlos.
  • Cambio de contraseñas de usuarios utilizando cuentas de correos electrónicos.
  • Activación y desactivación de usuarios.
  • Control de fortaleza de contrseñas.
  • Actualmente no se trabajó en los procesos específicos de borrado en cascada de tablas cabeceras y detalles.

2 Estructura del código

La aplicación cuenta con el siguiente modelo de directorios:
  • Layout: directorio con templates que se encuentran en todos los modulos. Aquí se guardan los típicos header, footer, sidebar para dibujarlos en el documento final.
  • Lib: en sub directorios se encuentran los modulos. Por cada módulo que desee agregar se deberá crear un sub directorio.
  • Public: se encuentran los estilos, archivos javascripts y fuentes que son utilizadas por los archivos html.

3 Estructura interna de los módulos

Al momento de realizar altas, bajas y modificaciones. Las mismas son divididas en acciones:
  • Save.
  • Edit.
  • Delete.

La estructura que siguen los archivos se refleja en la siguiente tabla:
Modelo/ Model
nodeDataBase.sql : Base de datos estructurada.






View/ Vista, son los archivos que se encuentran dentro de cada módulo en el directorio /lib
index.ejs : Implementa la vista con la estructura del html principal.
modal_index.ejs : Implementa la vista de una ventana modal para edición de datos. Atención!, los nombres de campos se encuentran relacionados con los scripts en /public/nombreModulo_clientScripts.js






Controlador/ Controller, son los archivos que se encuentran en el directorio /lib
index.js : contiene las rutas y lógica del módulo. El que hacer cuando llega una petición.
process.js : tiene implementada la lógica de los casos. Pequeñas funciones utilizadas en el index.js principal del módulo.






Otros archivos
/Public/js/profiles_clientScripts.js : Funciones de control de campos y otras cosas. Los nombres de campos de los formularios se encuentran relacionados con los scripts presentes en archivos JavaScript del lado del cliente. Estos siguen la modalidad de nombre de módulo seguido por _clientScripts.js
pass.js : Implementación de funciones de encriptación. Este archivo se encuentra en la raíz del proyecto.







4 Flujo de una llamada típica.

  • Cliente con navegador invoca a la página por medio de método GET.
  • Servidor recibe la url solicitada y la procesa por medio de las funciones app.get() en index.js.
  • En index.js se llama a process.js para recuperar datos de la BD utilizando getRowsServer().
  • Obtenidos los datos, desde el archivo index.js se llama a la función render() para dibujar la vista y los datos según la plantilla de index.ejs. Index.ejs, contiene los layouts header.ejs, sidebar.ejs y footer.ejs.
  • El cliente recibe la respuesta con la página desplegada y los datos.

5 Módulo de administración de clientes

El módulo deberá mantener al día los clientes, asignar perfiles y administrar el acceso a las urls del menú.
El módulo deberá poder ser implementado en distintas aplicaciones en forma reutilizable.
Se deberá poder hacer mantenimiento de los usuarios que utilizan la aplicación, los usuarios se encuentran agrupados en grupos. Los grupos se encuentran relacionados con los módulos del sistema.

6 Preparar la base de datos para la aplicación

Teniendo instalado Mysql procedemos de la siguiente forma.

6.1 Pasos para crear base de datos Mysql

mysqladmin create nodeDataBase -p
mysql -u root -p
SET PASSWORD=PASSWORD('miclave');
CREATE DATABASE nodeDataBase;
GRANT ALL ON nodeDataBase.* to usuario@localhost IDENTIFIED BY 'miclave';

* Verificar las reglas del firewall.
La aplicación utiliza el puerto 3720.

7 Fuentes de información





Template de Bootstrap sb-admin http://startbootstrap.com/templates/sb-admin/
Tutorial Teknosains http://teknosains.com/i/contoh-modular-nodejs-dan-bootstrap-source-code-inside