2011-12-09 16 views
48

¿Cómo se detecta en qué entorno se está ejecutando una aplicación expressJS? (desarrollo, prueba, producción?). No hay nada en process.env que indica un ambiente ...¿Cómo se detecta el entorno en una aplicación express.js?

Soy consciente de que puede declarar variables en el archivo de configuración en cada entorno, pero eso no ayuda si está cargando dinámicamente módulos ...

Respuesta

60

Puede verificar el medio ambiente marcando app.settings.env (esto funcionará en Express), o puede hacerlo de una manera más directa marcando process.env.NODE_ENV (el entorno es el que se encuentra en esa variable o 'desarrollo' mediante Por defecto < esto también funciona en otras bibliotecas como Socket.IO, etc.

+1

gracias! Me estaba ejecutando en desarrollo, por lo que NODE_ENV nunca estuvo presente. No tengo acceso a 'app' dentro del código que estoy escribiendo, pero verificando NODE_ENV y el valor predeterminado para' development' funciona – sethvargo

+0

¿Cómo puedo hacerlo desde un Gruntfile.js? Intenté ambos pero la aplicación no está definida y process.env.NODE_ENV no está definido. ¿Hay una manera? – Vadorequest

+0

Es mejor tenerlo configurado en 'bashrc': http://www.hacksparrow.com/running-express-js-in-production-mode.html – alessioalex

2

Puede detectar en qué entorno se encuentra inspeccionando app.settings.env.

+1

esto no funciona si no tiene acceso a expresar (como en un módulo lib personalizado) – sethvargo

+3

@sethvargo El entorno tendría que ser inyectado en el módulo, ya sea mediante el constructor o la inyección de método. p.ej. myModule.doSomething (app.settings.env). Si este módulo es un código de nivel inferior que se llama desde un código de nivel superior, entonces el valor debe pasar a la pila de llamadas. –

21

app.get ('env') también devolvería el entorno.

if (app.get('env') === 'development') { 
    app.use(express.errorHandler()); 
} 
+13

¿Pero cómo lo sabe? Donde mira expreso para descubrir en qué se ha configurado 'env'. No lo he establecido en el código de mi aplicación. – Costa

+2

@Costa se establece en el shell de Unix como la variable de entorno 'NODE_ENV'. Nota ** el término 'env' aquí está sobrecargado de forma confusa **: el entorno Unix, donde a veces se almacenan configuraciones para aplicaciones, así como el entorno NODE_ENV que determina la producción, desarrollo, etc. – mikemaccana

+1

@mikemaccana, Ah, lo tengo. El término "sobrecargado" explica mucho allí. ¡Muchas gracias! – Costa

9

me gustaría abordar una forma sencilla de pasar variables NODE_ENV a su script nodo con el fin de acceder a ellos en process.env

"scripts": { 
    "start": "./node_modules/.bin/cross-env NODE_ENV=development ./node_modules/.bin/nodemon server.js", 
    "debug": "./node_modules/.bin/cross-env NODE_ENV=development ./node_modules/.bin/nodemon --debug server.js", 
    "test": "./node_modules/.bin/cross-env NODE_ENV=test ./node_modules/.bin/babel-tape-runner test/test-*.js" 
    }, 

se puede utilizar como

if (app.get('env') === 'development') { 
    app.use(express.errorHandler()); 
} 
0

no puede acceder al servidor nodejs. puede detectar env nodo de Express utilizando app.setting.env

  1. var app = express();
  2. app.setting.env rendir al motor de plantillas.
  3. consultar desde el navegador.
0

Hay muchas recomendaciones útiles en otras respuestas. En general estoy haciendo de esta manera:

const environment = process.env.NODE_ENV || 'development'; 

Lo bueno es que tal enfoque no es específica para expresar por sí mismo, pero en realidad es una práctica aceptada en más amplio ecosistema de Node.js.

Además, he implementado un módulo reutilizable, que permite detectar automáticamente el entorno mediante el análisis de los argumentos CLI y la variable NODE_ENV. Esto podría ser útil en su máquina de desarrollo, porque puede cambiar fácilmente el entorno pasando un argumento CLI a su programa Node.js como este: $ node app.js --prod.

Por favor, ver más detalles y casos de uso en el detect-environment's page.

Cuestiones relacionadas