Estoy usando node.js + express.js + everyauth.js. He movido toda mi lógica de everyauth a un archivo de módulo
var login = require('./lib/everyauthLogin');
dentro de esto, cargo mi archivo de configuración oAuth con las combinaciones de clave / secreto:
var conf = require('./conf');
.....
twitter: {
consumerKey: 'ABC',
consumerSecret: '123'
}
Estos códigos son diferentes para diferentes entornos: desarrollo / preparación / producción, ya que las devoluciones de llamada son a diferentes URL.
Qu. ¿Cómo configuro estos en la configuración ambiental para filtrar a través de todos los módulos o puedo pasar la ruta directamente al módulo?
Establecer en env:
app.configure('development', function(){
app.set('configPath', './confLocal');
});
app.configure('production', function(){
app.set('configPath', './confProduction');
});
var conf = require(app.get('configPath'));
Aconteció en
app.configure('production', function(){
var login = require('./lib/everyauthLogin', {configPath: './confProduction'});
});
? espero que tenga sentido
Respuestas:
Mi solución,
cargar la aplicación usando
Luego configúrelo
config.js
como una función en lugar de un objetoLuego, según la solución de Jans, cargue el archivo y cree una nueva instancia que podríamos pasar en un valor si es necesario, en este caso
process.env.NODE_ENV
es global, por lo que no es necesario.Entonces podemos acceder a las propiedades del objeto de configuración exactamente como antes
fuente
new
necesario?new
. Lo sigo en elconfig.js
....Config = function(){...}; module.exports = Config()
También podría tener un archivo JSON con NODE_ENV como nivel superior. En mi opinión, esta es una mejor manera de expresar los ajustes de configuración (en lugar de usar un script que devuelve ajustes).
Ejemplo de env.json:
fuente
Una solución muy útil es usar el módulo de configuración .
después de instalar el módulo:
Puede crear un archivo de configuración default.json . (puede usar un objeto JSON o JS usando la extensión .json5)
Por ejemplo
Esta configuración predeterminada puede ser anulada por el archivo de configuración del entorno o un archivo de configuración local para un entorno de desarrollo local:
production.json podría ser:
development.json podría ser:
En su PC local, podría tener un local.json que anule todo el entorno, o podría tener una configuración local específica como local-production.json o local-development.json .
La lista completa de orden de carga .
Dentro de tu aplicación
En su aplicación, solo necesita requerir config y el atributo necesario.
Cargar la aplicación
cargar la aplicación usando:
o configurar el entorno correcto con forever o pm2
Siempre:
PM2 (a través de shell):
PM2 (a través de .json):
process.json
Y entonces
Esta solución es muy limpia y facilita la configuración de diferentes archivos de configuración para el entorno de producción / puesta en escena / desarrollo y también para la configuración local.
fuente
En breve
Este tipo de configuración es simple y elegante:
env.json
common.js
app.js
Para ejecutar en modo de producción:
$ NODE_ENV=production node app.js
En detalle
Esta solución es de: http://himanshu.gilani.info/blog/2012/09/26/bootstraping-a-node-dot-js-app-for-dev-slash-prod-environment/ , compruébalo para mas detalle.
fuente
La forma en que hacemos esto es pasando un argumento al iniciar la aplicación con el entorno. Por ejemplo:
En app.js cargamos
dev.js
como nuestro archivo de configuración. Puede analizar estas opciones con optparse-js .Ahora tiene algunos módulos centrales que dependen de este archivo de configuración. Cuando los escribes como tales:
Y puedes llamarlo entonces
app.js
como:fuente
app.configure('development
código app.js , pero echaré un vistazo para ver si puedo usar esta solución con esoUna forma elegante es utilizar el
.env
archivo para anular localmente la configuración de producción. No se necesitan interruptores de línea de comando. No hay necesidad de todas esas comas y corchetes en unconfig.json
archivo. Mira mi respuesta aquiEjemplo: en mi máquina, el
.env
archivo es este:Mi local
.env
anula cualquier variable de entorno. Pero en los servidores de preparación o producción (tal vez estén en heroku.com) las variables de entorno están preestablecidas para la etapaNODE_ENV=stage
o la producciónNODE_ENV=prod
.fuente
establezca la variable de entorno en el servidor de implementación (por ejemplo, como NODE_ENV = producción). Puede acceder a su variable de entorno a través de process.env.NODE_ENV. Busque el siguiente archivo de configuración para la configuración global
base contiene una configuración común para todos los entornos.
luego importar en otros módulos como
Codificación feliz ...
fuente
¿Qué tal hacer esto de una manera mucho más elegante con el módulo nodejs-config ?
Este módulo puede establecer el entorno de configuración según el nombre de su computadora. Después de eso, cuando solicite una configuración, obtendrá un valor específico del entorno.
Por ejemplo, supongamos que tiene dos máquinas de desarrollo llamadas pc1 y pc2 y una máquina de producción llamada pc3. Siempre que solicite valores de configuración en su código en pc1 o pc2, debe obtener la configuración del entorno de "desarrollo" y en pc3 debe obtener la configuración del entorno de "producción". Esto se puede lograr así:
Ahora cree una nueva instancia de configuración con la siguiente sintaxis.
Ahora puede obtener cualquier valor de configuración sin preocuparse por el entorno como este:
fuente
Esta respuesta no es nueva. Es similar a lo que ha mencionado @andy_t. Pero utilizo el siguiente patrón por dos razones.
Implementación limpia sin dependencias externas de npm
Fusionar la configuración predeterminada con la configuración basada en el entorno.
Implementación de Javascript
Normalmente uso mecanografiado en mi proyecto de nodo. A continuación se muestra mi implementación real copiada y pegada.
Implementación de TypeScript
fuente