es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Puedo desarrollar en Node.js para local y servidor al mismo tiempo?

Entonces, supongo que el lenguaje no importa realmente, pero la cosa es que tengo un archivo llamado database.js en una carpeta. Su código debe ser diferente dependiendo de si estoy programando en mi entorno local o si el código debe ser alojado en el servidor (heroku en mi caso).

Para el entorno local, tengo una base de datos postgresql, que es diferente de la que tengo como complemento en el servidor heroku. Es por eso que el código es diferente. La conexión a la base de datos es el ‘problema’.

Lo que hago ahora para solucionar esto, es comentar el código para el servidor, probar localmente, y cuando tengo algo utilizable, comento el código para local, comento el código para el servidor y despliego en el servidor.

Aquí está el código
https://github.com/MauroOyhanart/ControlDeGastosIngresos/blob/main/util/database.js

¿Qué soluciones puedo encontrar? Soy muy flexible. Soy realmente nuevo en la programación web y estoy buscando herramientas.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Una solución para manejar las diferentes configuraciones de bases de datos para entornos de desarrollo local y servidor sería usar variables de entorno. Esto le permitiría establecer una cadena de conexión de base de datos diferente dependiendo del entorno en el que se encuentre, sin la necesidad de comentar y cambiar manualmente el código.

    Por ejemplo, podría definir una variable de entorno llamada DATABASE_URL y establecerla en la cadena de conexión para su base de datos local de Postgresql mientras desarrolla localmente. Luego, al implementar en Heroku, podría establecer la misma variable de entorno en la cadena de conexión para el complemento de Postgresql que haya configurado en el servidor.

    En el código, luego puede acceder a esta variable de entorno de la siguiente manera:

    const { Client } = require('pg');
    
    const connectionString = process.env.DATABASE_URL;
    
    const client = new Client({
      connectionString: connectionString,
      ssl: process.env.NODE_ENV === 'production' // solo usar SSL en producción
    });
    
    client.connect();
    

    De esta manera, el mismo código funcionaría en ambos entornos y solo necesitaría establecer la variable de entorno de manera diferente dependiendo de dónde esté ejecutando el código.

    Otra solución sería usar un archivo de configuración que defina la cadena de conexión para cada entorno. En este caso, crearía un archivo de configuración separado para cada entorno y cargará el archivo adecuado dependiendo del entorno en el que se esté ejecutando el código.

    Por ejemplo, podría tener un archivo config.json, con dos configuraciones – local y producción:

    {
      "local": {
        "connectionString": "postgres://localhost/mydatabase"
      },
      "production": {
        "connectionString": "postgres://username:password@hostname/herokudatabase"
      }
    }
    

    En el código, luego cargaría la configuración adecuada de la siguiente manera:

    const config = require('./config.json');
    const env = process.env.NODE_ENV || 'local';
    
    const { Client } = require('pg');
    
    const connectionString = config[env].connectionString;
    
    const client = new Client({
      connectionString: connectionString,
      ssl: env === 'production' // solo usar SSL en producción
    });
    
    client.connect();
    

    Nuevamente, de esta manera solo necesitaría cambiar la variable de entorno NODE_ENV entre local y producción, dependiendo de dónde esté ejecutando el código.

Comments are closed.