Documentos de Académico
Documentos de Profesional
Documentos de Cultura
js
Inicializaremos el proyecto con el comando npm init con el objetivo de crear el package.json
que definirá toda nuestra aplicación.
Cuando el comando termine y tengamos los ficheros básicos creados vamos a montar los
siguientes directorios: /controllers, /models y /routes
Una vez creados los directorios mínimos pasaremos a crear el fichero entrypoint (index.js) y el
fichero de configuración de la aplicación.
Es el fichero que hace la función de punto de entrada de nuestra aplicación, el fichero index.js,
vamos a poner la configuración del servidor y a levantarlo.
'use strict'
app.listen(port, () => {
console.log(`Server running in http://localhost:${port}`);
console.log('Defined routes:');
console.log(' [GET] http://localhost:3000/');
});
Pues como se ve en la línea número 3 del script haciendo uso del require le estamos indicando
a node que queremos que nos cargue el core de nuestra aplicación, pero con esto no es
suficiente ya que tenemos que indicar algo más que veremos a continuación.
'use strict'
A raíz de la pregunta anterior, si queremos hacer que un fichero “llame a otro”, aparte de
hacer uso de la sentencia require en el fichero destino tenemos que exportarlo mediante el
mecanismo de module.exports (última línea)
Una vez exportado ya podremos utilizarlo en cualquier parte de la app siempre y cuando lo
carguemos con require.
Vale, hasta aquí todo correcto. Vamos a ver ahora como organizar un proyecto Node.js con sus
rutas, sus controladores y sus modelos de datos.
Hay varias formas de plantear y crear un controlador, pero para el ámbito organizativo (no
programático) de este artículo vamos a hacer funciones en lugar de clases, solo tenemos un
controlador.
'use strict'
module.exports = {
getAlbum,
getAlbums,
saveAlbum,
updateAlbum,
deleteAlbum
}
Este es sería un controlador típico en un modelo de CRUD (Crear, Leer, Actualizar y Borrar; del
original en inglés: Create, Read, Update and Delete) ) en el que implementamos las cuatro
operaciones típicas, lectura de datos, creación, actualización de datos y borrado.
Cada función de este controlador hará una tarea diferente por lo que decimos que serán
funciones atómicas.
Peeeeero lo importante de toda esta película esta al final del script. Fíjate que al igual que
hacíamos en el fichero app.js, en este estamos exportando las funciones que nos interesan
para que puedan ser llamadas desde otro fichero, como por ejemplo desde el fichero de
definición de rutas.
Y al igual que en el fichero anterior habíamos creado cuatro funciones (bueno en realidad 5
pero dos de ellas internamente sirven para lo mismo, getAlbum y getAlbums, lectura de datos)
ahora vamos a crear también 4 rutas y cada una de ellas matcheará con un método HTTP
diferente.
Para que no te pierdas este va a ser el esquema de la relación métodos HTTP (API Restful) y
funciones:
'use strict'
api.get('/album/:id', AlbumController.getAlbum);
api.get('/album', AlbumController.getAlbums);
api.post('/album', AlbumController.saveAlbum);
api.put('/album', AlbumController.updateAlbum);
api.delete('/album/:id', AlbumController.deleteAlbum);
module.exports = api;
Mira bien:
Línea numero 5: nos traemos el sistema para definir rutas del framework.
Y con esto ya tendríamos la estructura básica y el artículo montado sobre como organizar un
proyecto Node.js.
Por supuesto que faltan muchas cosas, de primeras el modelo de datos (eso lo dejaré para
cuando empecemos con MongoDB) pero podríamos meter un directorio para la realización de
test unitarios, otro para las vistas en caso en que quisiéramos ampliar la API… otro para
utilidades, no sé…