Ing. Sistemas Computacionales

Mostrando las entradas con la etiqueta mongoose. Mostrar todas las entradas
Mostrando las entradas con la etiqueta mongoose. Mostrar todas las entradas

domingo, 22 de septiembre de 2024

Proyecto | Express + React | CotoJs

septiembre 22, 2024 Creado por Victor Jesus Maximo Abundio Sin comentarios

 

CotoJs | Aplicación web

Introducción

Este proyecto fue creado en 22 de septiembre de 2024, es un proyecto que consiste en una red social de salas (grupo de conversaciones) en tiempo real, con la funcionalidad de un sistema de autenticación, es decir, el sistema permite verificar la identidad de un usuario (con login y register). 


La aplicación web cuenta con una conexión a base de datos, es decir, que almacena información en la nube, y se puede recuperar en cualquier momento.


Cada usuario se puede registrar con su nombre,  correo electrónico y una contraseña, y dentro del sistema cada perfil/cuenta puede crear, editar, eliminar y ver sala de conversación, adicionalmente cada usuario tiene su foto de perfil, cada sala tiene su portada y sus miembros visibles. 


La aplicación web, para el lado de BackEnd fue desarrollada usando : NodeJS + Express + MongoDB + Mongoose + JW Token + Socket.io + CORS + etc. Además de incluir módulos de npm como : bcryptjs, express-sesion, morgan, dotenv, http, multer, sharp, nodemon, etc.


La aplicación web, para el lado de FrontEnd fue desarrollada usando : Vite + React + Axios + Tailwind CSS + Socket.io Cliente + etc. Además de incluir módulos de npm como: dayjs, js-cookie,  sweetalert2, sweetalert2-react-content, react-tippy, react-spinners, react-infinite-scroll-component, etc.


Ver proyecto (GitHub)

Funciones

Conjunto de tecnologías y características para este aplicación web:

  • Proyecto con infraestructura virtualizada o proyecto Vagrantizado.

  • Proyecto dockerizado.

  • Proyecto de RectJS + Axios (FrontEnd).

  • Proyecto de NodeJS + Express + Mongoose (BackEnd).

  • Base de datos usando MongoDB

  • Mapeador de Documentos a Objetos (ODM con Mongoose).

  • Notificaciones de sistema (con Toastify y SweetAlert2).

  • CRUD para usuarios (crear, leer, eliminar, actualizar).

  • CRUD para salas (crear, leer, eliminar, actualizar).

  • CRUD para mensajes (crear, leer, eliminar, actualizar).

  • Sistema de Login (con express-session).

  • Encriptación de contraseña (con bicrytjs).

  • CORS solo origines permitidos (con cors).

  • Chat en tiempo real (con socket.io)

  • Sistema de token usando JSON Web Token (con jsonwebtoken)

  • Sistema de inactividad de 30 minutos (en FrontEnd y BackEnd).

¿Cómo funciona?

Para hacer funcionar la aplicación web es necesario tener instalado Node JS y MongoDB, en sus máquina de host, posteriormente puede seguir las siguientes instrucciones para poder usarlo de forma local.


Configurar variables de entorno (Obligatorio) Para BackEnd Acceder a la carpeta de `/express-api` y crear un copia de `.env.example` con nombre de `.env`. Para FrontEnd Acceder a la carpeta de `/react-vite` y crear un copia de `.env.example` con nombre de `.env`. NOTA: En caso de que prefiera usar docker o docker-compose para arrancar el proyecto es necesario modificar `localhost` por el IP de la máquina host, por ejemplo: ``192.168.63.80``, para la máquina de Vagrant + Ubuntu20.04.


Las variables de entorno en este caso sería lo siguiente: Archivo `.env` para BackEnd ```text # Ambiente de desarrollo APP_PORT=5880 APP_URL=http://192.168.63.80 APP_ENV=local NODE_ENV=development # MongoDB URI APP_MONGODB_URI=mongodb://root:secret@service_db/db-cotojs?authSource=admin # Clave secreta APP_SECRET_KEY=ssh # CORS APP_CORS_1=http://192.168.63.80:5880 APP_CORS_2=http://192.168.63.80:5173 APP_CORS_3=http://192.168.63.80:5173/api/v1 # API Socket.io APP_CLIENT_SOCKET_IO=http://192.168.63.80:5173 ```

Archivo `.env` para FrontEnd ```text # API Express VITE_API_URL=http://192.168.63.80:5880/api/v1 # API Socket.io VITE_SOCKET_IO_DOMAIN=http://192.168.63.80:5880 VITE_SOCKET_IO_PATH=/api/v1/socket.io ``` Usando pnpm (BackEnd y FrontEnd) Paso 1) Ejecuta el siguiente comando desde el directorio `/express-api` para instalar las dependencias. ```shell $ pnpm install ``` Paso 2) Ejecuta el siguiente comando desde el directorio `/express-api` para correr el servicio API RestFul. ```shell $ pnpm run dev ``` Paso 3) Ejecuta el siguiente comando desde el directorio `/react-vite` para instalar las dependencias. ```shell $ pnpm install ``` Paso 4) Ejecuta el siguiente comando desde el directorio `/react-vite` para correr el servicio React + Vite. ```shell $ pnpm run dev ``` Usando docker (BackEnd y FrontEnd) Paso 1) Ejecuta el siguiente comando desde el directorio `/express-api` para crear una red y correr el servidor mongodb ```shell $ docker network create cotojs-network $ docker run --network cotojs-network --name cotojs-mongodb-run -p 27017:27017 -d mongo:4.4` ``` Paso 2) Ejecuta el siguiente comando desde el directorio `/express-api`, para crear una imagen y crear un contenedor docker con: Express + Mongoose + Socket.io + JWT + CORS + Multer + etc ```shell $ docker build -t cotojs-api-build -f api.Dockerfile . $ docker run --network cotojs-network --name cotojs-api-run -p 5880:5880 -d cotojs-api-build ``` Paso 3) Ejecuta el siguiente comando desde el directorio `/react-vite`, para crear una imagen y crear un contenedor docker con: React + Vite ```shell $ docker build -t cotojs-react-build -f react.Dockerfile . $ docker run --network cotojs-network --name cotojs-react-run -p 5173:3000 -d cotojs-react-build ``` Usando docker-compose (BackEnd y FrontEnd) Paso 1) Ejecuta el siguiente comando desde el directorio raíz `/`, para crear servicios, volúmenes y redes de docker-compose ```shell $ docker-compose up --build -d ``` Paso 2) Ejecuta el siguiente comando desde el directorio raíz `/`, para eliminar servicios, volúmenes y redes de docker-compose ```shell $ docker-compose down ```

Vista previas











viernes, 7 de abril de 2023

Proyecto | ReactJS | MusicApp

abril 07, 2023 Creado por Victor Jesus Maximo Abundio Sin comentarios

MusicApp | Aplicación web





Introducción



El proyecto Full-Stack consiste en registrar música con información sobre título, artista, género y año, por lo que todos pueden compartir la información de sus canciones favoritas sin necesidad de registrarse a la aplicación web. Fue creado por mi mismo, el día 7 de abril de 2023.


Este proyecto tiene una arquitectura "monolítica", fue desarrollado usando usando NodeJS + Express + Mongoose + MongoDB + Handlebars. Así también, se utilizó la base de datos de MongoDB para almacenar los datos usando Mongoose cómo ODM, por lo que los datos se guardan en la nube, y pueden ser fácilmente recuperados.


Por último, pero no menos importante, este proyecto, implementa Vagrant con Ubuntu 18.02LTS como sistema operativo, además de incluir Docker y Docker-compose para crear y lanzar servicios (mongodb:4.0, node:14.21.3-slim, ) por contenedores. Por lo que, se puede probar usando Docker / Docker-compose / NPM.


Ver proyecto (GitHub)

Funciones

Esta arquitectura está compuesto por un solo código que maneja las rutas (endpoints), la lógica de negocio, y la interacción con la base de datos, sigue el enfoque de una arquitectura "monolítica", similar a cómo se estructuran las aplicaciones con Laravel.

Este conjunto de tecnologías y características para este aplicación web:

  • Proyecto con infraestructura virtualizada o proyecto Vagrantizado.
  • Proyecto dockerizado.
  • Proyecto con arquitectura "monolítica".
  • Patrón de diseño MVC (Modelo-Vista-Controlador)
  • Base de datos usando MongoDB.
  • Mapeador de Documentos a Objetos (ODM con Mongoose).
  • Notificaciones de sistema.
  • CRUD para música (crear, leer, eliminar, actualizar).

¿Cómo funciona?

Configuración Backend

Es necesario crear un archivo `.env` del proyecto de backend dentro del path **/**(raíz), opcionalmente puede hacer una copia del archivo `.env.example` con el nombre de **.env** que incluyen variables de entorno


Variables de entorno para proyecto | Musicapp

  • APP_PORT *(Requerido)* Puerto para la aplicación por defecto es `3015`


Variables de entorno para base de datos | MongoDB Atlas

  • APP_DB_USER *(Requerido)*
  • APP_DB_PASSWORD *(Requerido)*
  • APP_DB_DATABASE *(Requerido)*


Variables de entorno para base de datos | Otros

  • APP_DB_URI *(Opcional)*
Solo en caso de requerir usuario y contraseña, por ejemplo: `mongodb://<user>:<password>@<host>:<port>/<database>?<options>`. Esta variable de entorno anula las anteriores.

El URI por defecto es mongodb://user_vagrant:pass@service_db/db_vagrant?authSource=admin

Correr aplicación de forma independiente (Usando npm)

Configuración previa

Antes de ejecutar la aplicación es necesario configurar el archivo `.env` en la ruta **./** (raíz), la configuración necesario es la siguiente:

```text
# MusicApp
APP_PORT=3015 # Puerto para Music App

# Database para Servidor de MongoDB Atlas
APP_DB_USER="<user>"
APP_DB_PASSWORD="<password>"
APP_DB_DATABASE="<database>"

# Database para Servidor Local
APP_DB_URI="mongodb://user_musicapp:pass@service_db/db_musicapp?authSource=admin" # Opcional
```

Iniciar la aplicación

Es necesario ejecutar el comando dentro del path para iniciar la aplicación ./ (raíz)

$ npm run start

Correr aplicación de forma automatizada (Usando docker-compose)


Es necesario ejecutar el siguiente comando desde donde se encuentra el archivo docker-compose.yml

Configuración previa

Antes de ejecutar los proyectos es necesario configurar el archivo `.env` en la ruta ./musicapp, la configuración necesario es la siguiente:

```text
# MusicApp
APP_PORT=3015 # Puerto para Music App

# Database para Servidor de MongoDB Atlas
APP_DB_USER="<user>"
APP_DB_PASSWORD="<password>"
APP_DB_DATABASE="<database>"

# Database para Servidor Local
APP_DB_URI="mongodb://user_musicapp:pass@service_db/db_musicapp?authSource=admin" # Opcional
```


Esto construye y corre la aplicación en segundo plano

$ docker-compose build && docker-compose up -d

Esto detiene y elimina la aplicación

$ docker-compose stop -f && docker-compose rm -f


Correr aplicación de forma automatizada (Usando vagrant)

Nota:

Es necesario ejecutar el siguiente comando desde el directorio/carpeta raíz donde se encuentra el archivo docker-compose.yml.


Cabe mencionar que el archivo docker-compose.yml es creado y configurado específicamente para ejecutarse dentro de vagrant.

Así también el comando "vagrant up" o "vagrant reload", levanta los servicios definidos en el archivo docker-compose.yml (Por defecto).

Configuración previa

Antes de ejecutar los proyectos es necesario configurar el archivo `.env` en la ruta ./musicapp, la configuración necesario es la siguiente:


```text
# MusicApp
APP_PORT=3015 # Puerto para Music App

# Database para Servidor de MongoDB Atlas
APP_DB_USER="<user>"
APP_DB_PASSWORD="<password>"
APP_DB_DATABASE="<database>"

# Database para Servidor Local
APP_DB_URI="mongodb://user_musicapp:pass@service_db/db_musicapp?authSource=admin" # Opcional
```



Crear maquina virtual

Este comando crea una máquina virtual usando 'vagrant' para correr docker y docker-compose dentro de ella. Por tal motivo, este comando se debe ejecutar una sola vez.

$ vagrant up


Construir y levantar el proyecto
Este comando reinicia la máquina virtual usando 'vagrant', así también ejecuta la provision run-workspace definida en el archivo Vagrantfile.

run-workspace : Suspende, Elimina, Construye y Levanta los servicios de __docker-compose__ en el mismo orden.

Por tal motivo, este comando se puede ejecutar las veces que sean necesarias.

$ vagrant reload

Vista previas







Proyecto | ReactJS + Axios | NodeJS + Express + Mongoose | CRUD de Mascotas

abril 07, 2023 Creado por Victor Jesus Maximo Abundio Sin comentarios

Mascotas | Aplicación web



Introducción

El proyecto Full-Stack consiste en registrar mascotas con información como edad, nombre, raza y enfermedades, por lo que todos pueden comparar la información de sus mascotas sin necesidad de registrarse a la aplicación web. Fue creado por mi mismo, el día 7 de abril de 2023, inicialmente fue creado una prueba técnica de un puesto de trabajo de desarrollador Full-Stack.


Este proyecto tiene una arquitectura de "FrontEnd y BackEnd desacoplados", fue desarrollado usando ReactJS + Axios para el lado de "FrontEnd" y usando NodeJS + Express + Mongoose para el lado del "BackEnd". 


También se utilizó la base de datos de MongoDB para almacenar los datos usando Mongoose cómo ODM, por lo que los datos se guardan en la nube, y pueden ser fácilmente recuperados.


Por último, pero no menos importante, este proyecto, implementa Vagrant con Ubuntu 18.02LTS como sistema operativo, además de incluir Docker y Docker-compose para crear y lanzar servicios (mongodb:4.0, node:14.21.3-slim, ) por contenedores. Por lo que, se puede probar usando Docker / Docker-compose / NPM.


Ver proyecto (GitHub)


Funciones

Esta arquitectura representa un enfoque completo y moderno para el desarrollo de aplicaciones web, integrando frontend, backend, y bases de datos, junto con herramientas de virtualización y contenedores para un manejo eficiente del entorno de desarrollo y despliegue.


Este conjunto de tecnologías y características para este aplicación web:

  • Proyecto con infraestructura virtualizada o proyecto Vagrantizado.

  • Proyecto dockerizado.

  • Proyecto de RectJS + Axios (FrontEnd).

  • Proyecto de NodeJS + Express + Moongose (BackEnd).

  • Base de datos usando MongoDB

  • Mapeador de Documentos a Objetos (ODM con Mongoose).

  • Notificaciones de sistema.

  • CRUD para mascotas (crear, leer, eliminar, actualizar).

¿Cómo funciona?

Es necesario crear un archivo `.env` del proyecto de backend dentro del path **./api**, opcionalmente puede hacer una copia del archivo `.env.example` con el nombre de **.env** que incluyen variables de entorno predeterminado o por default para funcionar con **docker-compose** y **vagrant**. <br> 


```text

# API Mascotas

API_PORT=3033 # Puerto para API mascotas

API_CORS_ORIGIN="http://localhost:3080" # URL de App mascotas


# Mongo Database para MongoDB Atlas

API_MONGO_HOST="<host>"

API_MONGO_PORT=<port>

API_MONGO_DATABASE="<database>"


# Mongo Database para MongoDB Local u Otro

API_MONGO_URI="mongodb://user_vagrant:pass@service_db/db_vagrant?authSource=admin"

```


Variables de entorno | Mascota Api

  • API_PORT *(Requerido)* Puerto para API mascota por default es `3033`

  • API_CORS_ORIGIN *(Requerido)* Es la URL del proyecto frontend de App Mascotas por default es `http://localhost:3033`


Variables de entorno para base de datos | Local u Otro

  • API_MONGO_HOST *(Requerido)*  

  • API_MONGO_PORT *(Requerido)* 

  • API_MONGO_DATABASE *(Requerido)*

  • API_MONGO_URI *(Opcional)* 

Solo en caso de requerir usuario y contraseña, por ejemplo: `mongodb://<user>:<password>@<host>:<port>/<database>?<options>`. Esta variable de entorno anula las anteriores.


El URI por defecto es `mongodb://user_vagrant:pass@service_db/db_vagrant?authSource=admin`


Configuración Previa | Frontend | Mascota App

Es necesario crear un archivo `.env` del proyecto de backend dentro del path **./mascotas-app**, opcionalmente puede hacer una copia del archivo `.env.example` con el nombre de **.env** que incluyen variables de entorno predeterminado o por default para funcionar con **docker-compose** y **vagrant**. <br> 


```text

# Base URL de Moscota API

REACT_APP_MASCOTA_API="http://localhost:3033/api/v1/mascota"

```


Variables de entorno | Mascota App

*  **REACT_APP_MASCOTA_API** *(Requerido)* Es la URL del proyecto backend de Mascotas API por default es `http://localhost:3033/api/v1/mascota`


Correr aplicación de forma independiente (Usando npm)

Es necesario ejecutar el siguiente comando desde donde se encuentra el archivo **package.json** de cada respectivo proyecto. 


Configuración previa

Antes de ejecutar los proyectos Frontend (App Mascotas) y Backend (API Mascota) es necesario configurar el archivo `.env`  de cada respectivo proyecto. 


Ejecutar Frontend

Es necesario ejecutar el proyecto frontend usando el sig. comando dentro del path **./mascotas-app/**


$ npm run start



Ejecutar Backend

Es necesario ejecutar el proyecto backend usando el sig. comando dentro del path **./api/**

$ npm run dev


Correr aplicación de forma automatizada (Usando docker-compose)

Es necesario ejecutar el siguiente comando desde donde se encuentra el archivo **docker-compose.yml** 


Configuración previa

Antes de ejecutar los proyectos Frontend (App Mascotas) y Backend (API Mascota) es necesario configurar el archivo `.env`  de cada respectivo proyecto. 


Esto construye y corre la aplicación en segundo plano


docker-compose build && docker-compose up -d



Esto detiene y elimina la aplicación


docker-compose stop -f && docker-compose rm -f



Correr aplicación de forma automatizada (Usando vagrant)

**Nota**

Es necesario ejecutar el siguiente comando desde la directorio/carpeta raíz donde se encuentra el archivo **Vagranfile** 


Cabe mencionar que el archivo **docker-compose.yml** Es creado y configurado específicamente para ejecutarse dentro de vagrant.

Así también el comando "vagrant up" o "vagrant reload", levanta los servicios definidas en el archivo **docker-compose.yml** (Por defecto).


Configuración previa

Antes de ejecutar los proyectos Frontend (App Mascotas) y Backend (API Mascota) es necesario configurar el archivo `.env`  de cada respectivo proyecto.


Crear maquina virtual

Este comando crea una máquina virtual usando **'vagrant'** para correr *docker* y *docker-compose* dentro de ella. <br>

Por tal motivo, este comando se debe ejecutar una sola vez. 


$ vagrant up 



Construir y levantar el proyecto

Este comando reinicia la maquina virtual usando **'vagrant'**, así también ejecuta la provision *run-workspace* definida en el archivo *Vagrantfile*. <br>

+ *run-workspace* : Suspende, Elimina, Construye y Levanta los servicios de *__docker-compose__* en el mismo orden. <br>


Por tal motivo, este comando se puede ejecutar las veces que sean necesarias. 


$ vagrant reload 


Ejecutar los contenedor individualmente y manualmente


Este comando levanta en segundo plano el servicio *__service_db__*


  $ doc run -d -p 2780:2780 -v /home/vagrant/data:/data/db -t service_db mongod --port 27080 --dbpath /data/db



Este comando levanta en segundo plano el servicio *__service_api__*


$ doc run -p 3033:3033 -v /home/max98/workspace/api/node_modules -t service_api npm run dev --no-deps




Vista previas




martes, 30 de noviembre de 2021

Proyecto | NodeJS + Express + MongoDB + HandleBars | Notas App

noviembre 30, 2021 Creado por Victor Jesus Maximo Abundio Sin comentarios

Notas App | Aplicación web




Introducción

Este proyecto fue creado en 30 Noviembre de 2021, es un proyecto que consiste en un CRUD para notas con la funcionalidad de un sistema de autenticación, es decir, el sistema permite verificar la identidad de un usuario (con login y register).

La aplicación web cuenta con una conexión a base de datos, es decir, que almacena información en la nube, y se puede recuperar en cualquier momento.

Cada usuario se puede registrar con su correo electrónico y una contraseña, y dentro del sistema cada usuario puede registrar notas.

La aplicación web fue desarrollado usando: NodeJS + MongoDB + Bootstrap v5

Además de incluir módulos de npm como : bcryptjs, connect-flash, express-handlebars, mongoose, etc.

Ver proyecto (GitHub)

Funciones

La aplicación web cuenta con las siguientes funcionalidades y componentes:
  • Registrar usuario con correo electrónico y contraseña.
  • Iniciar sesión (o login)
  • Cerrar sesión (o logout)
  • Notificaciones de sistema.
  • Encriptación de contraseñas.
  • Motor de plantillas (con Handlebars).
  • Mapeador de Documentos a Objetos (ODM con Mongoose).
  • Conexión a una base de datos usando MongoDB.
  • Recuperar datos de cada usuario.
  • CRUD para notas (crear, leer, eliminar, actualizar).
En conjunto, estos elementos forman un sistema web que permite a los usuarios:
  • Autenticarse (registrarse, iniciar sesión, cerrar sesión).
  • Gestionar notas personales.
  • Interactuar con la base de datos a través de MongoDB y Mongoose, utilizando un enfoque seguro (encriptación de contraseñas) y una interfaz dinámica creada con Handlebars.

¿Cómo funciona?

Para hacer funcionar la aplicación web es necesario tener instalado Node JS y MongoDB, en sus máquina de host, posteriormente puede seguir las siguientes instrucciones para poder usarlo de forma local.

Paso 1)
Accede a la carpeta del proyecto usando el sig. comando desde la terminal:

```shell

$ cd ./app-notas-mongodb-nodejs

```

Paso 2)
Crear una copia del archivo `.env.local` con el nombre de `.env` para establecer variables de entorno, para la aplicación.

NOTA: Puede modificar los valores de cada variable de entorno, o también puede dejarlo por defecto.

Paso 4)
Ejecutar el sig. comando para descargar dependencias de NodeJS

```shell
$ npm install
```

Paso 5)
Ejecutar el sig. comando para correr la aplicación web.

```shell
$ npm run dev
```

Vista previas