¿Dónde Pongo Las Configuraciones? – Una Guía Sencilla en Nodo.JS

Jack Yeh

Seguir

Feb 1, 2020 · 6 min read

Mejorar el Repositorio de Código de Calidad siguiendo este patrón de codificación!

tl; dr: Consulte el repositorio de código en https://github.com/teamzerolabs/config-service-reference.

Lo más probable es que sí. Siempre que su programa se conecte o realice llamadas a terminales remotos, necesita obtener las credenciales de seguridad de algún lugar.

Hay muchas maneras diferentes para cargar estos datos en el programa:

Esto es común en GitHub de arranque de los proyectos, esperemos que podamos educar y reducir este.

Nivel 1: Codifíquelo en el archivo de texto en sí, esto generalmente sucede un viernes o para personas que recién comienzan. El repositorio de referencia debería ayudarte a tener código que puedas usar en lugar de hacer esto.

Nivel 2: Cargándolo desde el proceso.objeto env en el lugar donde ocurre la conexión: Esto es mejor que la codificación dura, pero con el tiempo hace que la variable de entorno sea un poco difícil de rastrear. Porque no puede ir a un solo archivo para encontrar todas las variables de entorno a las que se hace referencia.

Nivel 3: Cargue todas las configuraciones de entorno desde un solo archivo — ¡esto se proporciona en este artículo y en el ejemplo de código! Esto le da la ventaja de saber a dónde ir para buscar configuraciones y permitir que el programa falle temprano si se suministraron valores incorrectos.

Nivel 4: Convierte el script de configuración en un servicio — Al hacerlo, ganamos la capacidad de hacer otras cosas interesantes: comprobar los valores cargados y cargar configuraciones adicionales desde S3 o base de datos, antes de ejecutar otro código de inicialización.

Antes de comenzar

  • Tener un nodo.Listo para ejecución de JS (Versión > 10)
  • Obtenga a Postman si no lo ha hecho-Alternativamente, puede usar el navegador o curl para acceder a la Api.
  • Echa un vistazo a https://github.com/teamzerolabs/config-service-reference en tu espacio local.
  • Tener un MySQL en funcionamiento: He incluido un archivo docker-compose en la carpeta db-setup, puede girar yendo allí y ejecutando docker-compose up -d .

Un Servicio de Libro Mínimo de Ejemplo rápido que devuelve libros almacenados en la base de datos MySQL

3 ¡buenos libros!

En la primera carpeta node-starthere , tenemos dos archivos:

  • principal.js – Aquí es donde configuramos el servidor express para servir la solicitud en localhost:3000/books
  • modelos/índice.js-Nos conectaremos a MySQL con mysql2 y sequelize .
  • Ejecute yarn start para comenzar.

Usted puede ver cómo las credenciales de base de datos están almacenados actualmente en la models/index.js :

es codificado aquí, pero podemos hacerlo mejor.

El inconveniente de las credenciales de base de datos de codificación dura

  • No es seguro: cualquiera que consulte el repositorio público ahora sabrá demasiado, especialmente si su instancia de base de datos es pública, ahora está expuesta.
  • Es difícil trabajar con diferentes entornos — si necesita conectar este código a implementaciones de prueba o producción, no desea realizar cambios de código solo para la implementación.

Paso # 1-Cargue cada una de estas variables de entorno

Puede leer más sobre las variables de entorno aquí. La esencia de esto es que puede pasar valores al programa en ejecución como este

Este enfoque está bien si tiene un pequeño número de configuraciones, pero como todos sabemos, cualquier proyecto que sobrevivió el primer mes de uso comenzará a integrarse con más servicios. (¡Un proyecto mío reciente de 4 meses tiene 40 variables! Imagínese escribirlos para la declaración de inicio de hilo de arriba, es demasiado).

Paso # 2-Carga las variables de entorno en tiempo de ejecución para el desarrollo local antes de su uso.

Afortunadamente, hay un paquete que nos ahorrará escribir las variables una y otra vez. Se llama dotenv . Usa dotenv de la siguiente manera:

Coloca tu código en src, crea una carpeta de configuración y crea un archivo .env dentro de ella:

DATABASE_URL=localhost
DATABASE_PORT=3306
DATABASE_USERNAME=root
DATABASE_PASSWORD=dIKnUfyfUPURi9irSplTOqGO4OtE0
DATABASE_NAME=configexample

Y dotenv.config cargará las variables en los archivos de texto en process.env , ¡ahora puede omitir escribir las variables en yarn start !

Paso # 3 – Métodos de conveniencia para analizar valores y salir temprano si faltan

La única cosa más peligrosa que un programa mal configurado es un programa mal configurado que se ejecuta durante meses.

Si olvidamos hacer el archivo .env, o poner valores incorrectos en él, lo ideal es que lo sepamos lo antes posible. Ejecutar código con configuración incompleta o incorrecta dificulta la solución de problemas.

Si observa la segunda carpeta node-with-config-service, puede ver que se agregan y usan los siguientes métodos de utilidad para analizar las variables:

Y reescribimos la sección de conexión a la base de datos a esta:

El programa ahora saldrá temprano con errores si faltan variables de entorno, y puede depender de un objeto de configuración estático que exista desde cualquier parte del programa.

Hay dos extensiones más para este enfoque: puede aplicar los mismos patrones en TypeScript e ir un paso más allá al configurar un servicio de ayuda real en NestJS. Ambos están incluidos en el repositorio de git. ¡Cubriremos esto en un futuro artículo de TypeScript + NestJS!