|
||
---|---|---|
db | ||
resources | ||
worker | ||
.dockerignore | ||
.eslintrc.yaml | ||
.gitignore | ||
Dockerfile | ||
README.md | ||
docker-compose.yml | ||
main.js | ||
package-lock.json | ||
package.json |
README.md
Backend Application
Este proyecto es una aplicación backend que utiliza Node.js, Docker, MariaDB y worker threads para gestionar la impresión de etiquetas ZPL.
Contenido
Instalación
-
Clona el repositorio:
git clone https://gitea.verdnatura.es/verdnatura/dismuntel.git
-
Instala las dependencias de Node.js:
npm install
-
Asegúrate de tener Docker y Docker Compose instalados en tu máquina.
-
Crea un archivo
.env
en el directorio raíz del proyecto y configura las variables de entorno necesarias:DB_HOST=mariadb DB_PORT=3306 DB_USER=user DB_PASSWORD=password DB_NAME=database
Uso
-
Levanta los servicios de Docker:
docker-compose up --build
-
La aplicación backend estará disponible en
http://localhost:3000
.
Descripción de Archivos
main.js
Este es el archivo de entrada principal que inicializa y comienza el procesamiento del pool de workers.
- WorkerPool: Se importa la clase
WorkerPool
desde el archivoworker/workerPool
. - threads: Se define el número de threads/workers que se van a utilizar.
- workerPool: Se instancia un nuevo
WorkerPool
con el número de threads definido. - assignTasks: Se llama al método
assignTasks
para asignar las tareas iniciales a los workers.
docker-compose.yml
Define los servicios de Docker necesarios para la aplicación.
- version: Especifica la versión del formato de
docker-compose
. - services: Define los servicios que se ejecutarán.
- mariadb: Servicio para la base de datos MariaDB.
- backend: Servicio para el backend de la aplicación.
Dockerfile
Define cómo construir la imagen Docker para el servicio de backend.
- FROM: Utiliza la imagen base de Node.js más reciente.
- COPY: Copia los archivos de configuración y el código de la aplicación al contenedor.
- RUN: Instala las dependencias necesarias.
- EXPOSE: Expone el puerto 3000.
- CMD: Comando por defecto para iniciar la aplicación.
worker.js
Maneja el procesamiento de registros de impresión y la comunicación con las impresoras.
- Configuración de logger: Se configura
log4js
para la salida de logs. - getConnectionWithRetries: Intenta obtener una conexión a la base de datos con reintentos.
- sendZPL: Envía el contenido ZPL a la impresora con reintentos.
- getPrinterIpAddress: Obtiene la dirección IP de una impresora basada en su ID.
- getRecordForProcessing: Obtiene un registro para procesamiento, con manejo de transacciones y reintentos.
- processRecord: Procesa un registro específico, generando el contenido ZPL y enviándolo a la impresora. Actualiza la base de datos con el estado de impresión.
workerPool.js
Maneja un pool de workers, creando y asignando tareas a los workers.
- initWorkers: Inicializa el número especificado de workers.
- createWorker: Crea un nuevo worker y maneja sus mensajes, errores y su finalización.
- replaceWorker: Reemplaza un worker fallido creando uno nuevo.
- assignTasks: Asigna tareas iniciales a todos los workers.
- closeAllWorkers: Termina todos los workers.
pool.js
Configura y exporta un pool de conexiones MySQL.
- dotenv: Carga las variables de entorno desde un archivo
.env
. - mysql.createPool: Crea un pool de conexiones MySQL usando las variables de entorno.
zplTemplate.js
Genera las etiquetas ZPL basadas en los registros y la plantilla de etiquetas.
- generateZPL: Genera el código ZPL para una etiqueta específica basada en el registro y la plantilla de etiquetas.
- rf_id_venature: Un valor fijo agregado al ID de expedición.
- id_venature: Formatea el ID de expedición para que tenga una longitud de 20 caracteres.
- upperCaseRecord: Convierte todos los valores de texto del registro a mayúsculas.
- result: Contiene el ZPL generado para cada etiqueta.
package.json
Este archivo define las configuraciones básicas de tu proyecto backend, las dependencias necesarias para su funcionamiento, y las herramientas de desarrollo necesarias para mantener la calidad del código. Cada dependencia tiene un rol específico que ayuda a la aplicación a operar de manera eficiente y segura tanto en el desarrollo como en la producción.
label.json
Este archivo define el formato y los mapeos necesarios para la generación de etiquetas ZPL. Si deseas cambiar los datos que se pasan a ZPL para la impresión de etiquetas, siempre debes seguir este formato. El label.json
tiene la siguiente estructura:
- name: Nombre de la etiqueta.
- mappings: Definición de los campos que serán reemplazados en la plantilla ZPL.
- val1, val2, ...: Claves que se corresponden con los campos del registro.
- zpl: Código ZPL que define el diseño de la etiqueta. Dentro del código ZPL, los valores de los mapeos se deben utilizar para ser reemplazados dinámicamente.
- density: La densidad de impresión.
- width: Ancho de la etiqueta.
- height: Altura de la etiqueta.
devDependencies
Estas son las bibliotecas necesarias solo durante el desarrollo y no en producción.
-
eslint: ^7.32.0
- Función: Una herramienta para encontrar y arreglar problemas en el código JavaScript. Ayuda a mantener un código limpio y consistente.
- Uso en tu proyecto: Analizar el código y asegurar que sigue las convenciones de codificación especificadas.
-
eslint-plugin-import: ^2.29.1
- Función: Un plugin para ESLint que ayuda a validar la importación/exportación de módulos ES6+.
- Uso en tu proyecto: Asegurar que las importaciones en tu proyecto sean válidas y que no haya problemas de módulos no encontrados.