En esta clase vamos a ver la estructura que Nest tiene para crear un proyecto, es decir, como organiza sus archivos. Vamos a ir paso por paso deteniendonos en cada una de las cuestiones. Una vez que ya tenes tu proyecto de Nest creado, te va a crear esta estructura.
Vamoa a analizar cada cosa
- dist: DIst es la carpeta que contiene todos los archivos necesarios para que el proyecto funcione compilados para que el servidor los pueda correr. Recordá que TypeScript no se ejecuta en tiempo de ejecución por lo que es necesario pasarlo a JavaScript. Eso para en la carpeta dist.
- node_modules: Todos los archivos de los modulos que instalaste con Node.
- src: Como en cualquier proyecto, la carpeta que contiene el código y en la que se suele trabajar.
- test: Nest instala Jest por defecto, por lo que nos permite crear pruebas e2e para nuestras aplicaciones backend.
- .eslint.js: Archivo de configuracion del linter
- .gitignore: Donde señalizamos que elementos no queremos subir a Git.
- .prettierrc: Configuración de prettier, una extension de VS Code que te recomiendo utilizar
- nest-cli.json: Archivo de configuración de Nest
- package.json: El archivo que contiene la descripcion de todos los paquetes que usamos en el proyecto.
- pnpm-lock.yaml: Archivo de pnpm (si decidiste utilizar pnpm como yo te va a aparecer) que contiene todos los paquetes que se instalaron y se asegura de que no haya conflicto de versiones entre diferentes entornos
- README.md: El readme del proyecto
- tsconfig.build.json / tsconfig.json: Archivos de configuración de TypeScript. El build configura como será la ejecución del linter mediante la terminal.
Carpeta src
Viste que en la carpeta src, la mas importante para el desarrollo de nuestro proyecto, hay 5 archivos. Vamos a detenernos uno por uno para poder entender mejor que pasa y cual es la importancia de cada uno. Esto también nos va a servir para entender en lineas generales como funciona Nest.
La forma en la que trabaja Nest es mediante el sistema de módulos. Los módulos son bloques de código orientados a un determinado tipo de tarea. Supongamos que tenemos un todo list en el que los usuarios se tienen que loguear para usarlo. Ahi tendremos dos modulos, en principio: un modulo de autenticación y otro módulo para la gestión de las tareas. Los módulos adentro pueden contener
- Controladores o controllers: Los controladores son los elementos encargados de gestionar como recibir requests y de como emitir las respuestas.
- Servicios o services: Los servicios son funciones que deben ser reutilizables para poder realizar instrucciones repetitivas dentro del código. Un ejemplo clarisimo de un servicio es cualquier petición a una base de datos.