Buenas! En esta serie veremos cómo realizar un desarrollo web usando ExpressJS, el framework más popular de NodeJS. Para la Base de Datos, emplearemos MongoDB junto con Mongoose. Combinaremos estas tecnologías mediante Javascript por lo que disfrutaremos de un excelente proyecto FullStack con el mejor lenguaje del momento .
También aprenderemos a montar un scafolding adecuado que mantenga organizado todo el proyecto, para que sea mantenible, escalable y sobretodo entendible por otros posibles desarrolladores que se puedan sumar al proyecto. En este apartado también aportaré algo de mi opinión y experiencia personal sobre cómo debe estructurarse una aplicación como esta.
Como siempre, emplearemos el uso de librerías de terceros y seguiremos con la mayor restricción posible todos los convenios, estándares y directrices de cada tecnología, para conseguir un código actualizado y homogéneo.
Lo primero será descargar e instalar NodeJS de su página oficial. Este proceso también nos instalará NPM. Con NPM podremos empezar a desarrollar nuestra aplicación gracias al paquete Express Generator. Lo instalaremos globalmente con el comando:
npm install express-generator -g
Ahora nos ubicaremos en algún directorio de nuestro sistema donde deseemos tener todos los archivos de nuestra aplicación. Por ejemplo, en la carpeta de nuestro Usuario, abrimos una consola (CMD ó GitBash) y ejecutamos el comando:
express ExpressDev
Esto nos descargará archivos creando el siguiente scaffolding:
Esta primera estructura precisa de algunos ajustes, sobretodo en los archivos .jade, que ahora han pasado a llamarse .pug. Estos archivos tienen que ver con el motor de plantillas por defecto de Express del cual hablaremos más adelante. Por el momento:
Tras las modificaciones dispondremos de los ficheros y directorios mínimos necesarios para un desarrollo FullStack.
Ahora, desde la raíz del proyecto, abriremos una Consola y ejecutaremos el comando:
npm install
Se descargarán todas las dependencias iniciales definidas en el package.json por Express Generator, creando el directorio node_modules (este directorio también deberá ignorarse del repositorio).
Al haber renombrado los .jade por .pug deberemos instalar Pug (que es el nuevo nombre del motor de plantillas por defecto de Express). Lo haremos con:
npm install -S pug
Ahora modificaremos en el archivo app.js el motor de plantillas que vamos a usar.
Buscamos la línea app.set('view engine', 'jade');
y la modificamos por
app.set('view engine', 'pug');
También deberemos buscar las líneas:
var index = require('./routes/index');
var users = require('./routes/users');
Y modificarlas por:
var index = require('./server/routes/index');
var users = require('./server/routes/users');
Además modificaremos el archivo bin/www, buscamos la línea con server.listen(port)
Y la editamos con:
server.listen(port, function(){
console.log('Express Server listening on port ' + server.address().port);
});
Finalmente, ejecutamos la aplicación con npm start
. Esto leerá el archivo package.json,
buscará en la sección de scripts
y ejecutará el comando ahí descrito ("node ./bin/www").
Si vemos ese mensaje quiere decir que podremos abrir nuestro navegador en la dirección localhost:3000
donde veremos
Y voilá! Ya tendremos nuestra aplicación corriendo. Ahora explicaremos un poco algunos de los archivos clave.
Este archivo es nuestra Aplicación Express. Aquí se define y configura todo lo necesario para que Express escuche peticiones de clientes y envíe respuestas. La forma correcta de desarrollar es modularizando el código, separándo distintas funcionalidades en distintos ficheros y luego los requerimos con require desde app.js. El Express Generator nos otorga un app.js muy básico donde básicamente sólo:
var app = express();
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', index);
y app.use('/users', users);
module.exports = app;
Al haberse exportado la variable app podremos requerirla desde cualquier otro archivo.
Ubicado dentro del directorio bin, este archivo require a nuestra Aplicación Express
con var app = require('../app.js');
y le aplica una configuración final.
Lo único que se hace aquí es decirle a Express sobre qué puerto escuchar
(por defecto el puerto 3000) con app.set('port', port);
y también se le solicita que
arranque la aplicación con var server = http.createServer(app);
. Tras esta línea es cuando nuestra
máquina comienza a atender peticiones.
Este fichero describe nuestra Aplicación. Posee información importante como las Dependencias del Proyecto, el nombre y la versión. Además posee una entrada scripts donde podemos poner comandos que queramos ejecutar con npm.
Podemos ver que en scripts está definido un comando, llamado start. Este
comando lo que hace es llamar al comando node ./bin/www. Es decir, al arrancar anteriormente
la aplicación con npm start
lo que estábamos haciendo por debajo era simplemente llamar a
node ./bin/www
.
Existen algunos paquetes que se usan como Dependecias del 90% de los proyectos de desarrollo web, y estos son JQuery y Bootstrap. En este proyecto usaremos Bootstrap-Sass, además agregaremos también FontAwesome, una excelente librería de Iconos Web .
Descargamos todo con npm install -S bootstrap-sass jquery font-awesome
En node_modules tendremos todos los archivos descargados.
GIT es el SVC de los que saben. Integrar Git
es muy sencillo, simplemente deberemos instalarlo. Una vez instalado, desde la raíz del proyecto,
escribimos el comando git init
y ya habremos convertido todo el directorio en un repositorio Git.
De este modo podremos compartir el código con más desarrolladores y además, dispondremos de la habilidad
de trackear cualquier modificación que sufra cualquier archivo. Esto nos ayudará a matener el código.
En este fichero le indicaremos al sistema Git qué archivos queremos ignorar, es decir, archivos que no deseemos subir al repo y por tanto no serán compartidos entre desarrolladores. Escribimos en él lo siguiente:
.env .idea node_modules public/*
Si queremos compartir el repositorio, la forma más cómoda es usando alguno de los Hostings gratuitos existentes como GitHub ó BitBucket. Deberemos crearnos una cuenta y seguidamente crear un Repositorio.
Una vez tengamos el Repositorio creado en nuestro Hosting y nuestro Repo inicializado en local (git init), podremos proceder a subir los archivos a la nube. Escribiremos:
git add -A
Se añadirán todos los archivos al Repositorio (a excepción de los descritos en .gitignore). Luego escribiremos:
git commit -m "Primer commit"
Con este comando añadimos un Mensje e indicaremos que estamos seguros de los cambios realizados (en este caso, haber añadido todos los archivos al Repo).
git remove [file]
Ya tendremos el Repositorio listo en local, finalmente, lo subiremos al hosting con:
git remote add origin https://url/al/repo.git
Con ese comando añadiremos un remote (dirección donde subir el repo). Y seguidamente escribimos:
git push
Todos los archivos se subirán a nuestro Hosting.
Para futuras actualizaciones,
los únicos comandos que deberemos escribir serán git add -A
y luego git push
.
git config user.name NuestroUsuario
git config user.email NuestroEmail
Si queremos disponer de todos los archivos de nuestro proyecto desde algún otro PC o si queremos compartir el código con algún otro desarrollador, sólo deberemos hacer un:
git clone UrlDelProyecto nombreDirectorio
Con esto tendremos todo el Repositorio en local dentro del directorio indicado.
Para sucesivas actualizaciones del Repo (cuando otros hagan git push
) sólo escribiremos:
git pull
y todos los ficheros se descargarán con las nuevas modificaciones en nuestro PC.
Todo el código de este proyecto se encuentra aquí.
Ahí podréis ver todo el código y si lo deseais podéis clonarlo para disponer de él con:
git clone https://github.com/GonzaloGPF/expressdev.git expressDev
*Donde "expressDev" es el nombre del directorio de vuestro PC donde queréis descargar todos los archivos.