Este es uno de los repositorios que utilizamos en la serie Tu primera aplicación full stack: NodeJS + React, disponible en YouTube. Te recomendamos que mires la serie para entender un poco más sobre las tecnologías que elegimos. 😃
¡Bienvenida/o! En este repositorio encontrarás una plantilla (de las infinitas posibles) para crear una API utilizando NodeJS. Las principales tecnologías que utilizamos son:
- NodeJS: entorno de ejecución para JavaScript.
- ExpressJS: framework para crear aplicaciones web.
- Sequelize: ORM (object-relational mapping) para interactuar con una base SQL desde objetos JavaScript.
- PostgreSQL: base de datos SQL.
- Jest: framework para escribir tests.
Para crear un proyecto siguiendo esta plantilla, lo único que tenés que hacer es clickear en el botón que dice Use this template
. ¡Y no te olvides de cambiarle el nombre en el package.json
!
Vas a necesitar un IDE o al menos un editor de texto que coloree la sintaxis. Recomendamos utilizar Visual Studio Code - que se lleva muy bien con proyectos JavaScript - enriquecido con los siguientes plugins:
Para ejecutar el código es necesario tener NodeJS en su versión 14 (lts/fermium
). Para instalarlo recomendamos utilizar el manejador de versiones nvm
, aunque también podés hacerlo manualmente siguiendo las instrucciones adecuadas para tu sistema operativo.
Por último, se incluye un archivo de Docker Compose con todo lo necesario para instalar y configurar las bases de datos en PostgreSQL (una para desarrollo y otra para test). Si por algún motivo no querés usar Docker, vas a tener que instalar PostgreSQL y luego ejecutar el script docker/init/crear-db.sh
en tu entorno.
Asumiendo que ya configuraste todos los prerrequisitos y que vas a utilizar Docker, estos son los comandos que deberías ejecutar la primera vez que trabajes en el proyecto:
# Instala, configura y levanta las bases de datos.
# El flag -d (daemon) hace que la ejecución continue incluso luego de reiniciar la máquina.
docker-compose up -d
# Copia las variables de entorno necesarias para acceder a las bases de datos.
cp .env.example .env
# Instala las dependencias Node del proyecto.
npm install
# Ejecuta las migraciones iniciales para las bases de dev y test.
npm run db:init
NODE_ENV=test npm run db:init
De manera opcional, también podés cargar unos datos de prueba, llamados seeders, que vienen incluidos. A medida que el desarrollo continue, se podrían seguir agregando más datos que ayuden en las pruebas manuales. Para cargar los seeders, ejecutar el siguiente comando:
# (Opcional) Carga los datos de prueba en la base de desarrollo.
npm run db:seed
Breve descripción de qué se puede encontrar en cada uno de los directorios del proyecto:
.
├── bin # Punto de entrada del servidor
├── db
│ ├── migrations # Migraciones de la base de datos
│ └── seeders # Datos de prueba para la base de datos
├── docker # Configuración de Docker para desarrollo
├── lib
│ ├── config # Configuración de la base de datos
│ ├── controllers # Acciones de nuestra aplicación
│ ├── models # Definición de modelos, atributos, etc
│ └── routes # Rutas de la API
└── test # Utilidades para escribir tests
A continuación, algunos comandos necesarios para el desarrollo diario en este proyecto.
# Levanta el proyecto y recarga automáticamente si hay cambios.
npm start
# Ejecuta los tests una sola vez.
npm test
# Ejecuta los tests y se queda esperando por cambios.
npm test:watch
# Ejecuta las migraciones.
npm run db:init
# Carga los datos de prueba.
npm run db:seed
# Crea una nueva migración llamada `add-descripcion-to-producto`.
npx sequelize migration:generate --name add-descripcion-to-producto
# Crea un nuevo seeder llamado `edificios`.
npx sequelize seed:generate --name edificios
# Deshace la última migración.
npx sequelize db:migrate:undo