web-dev-qa-db-fra.com

Qu'est-ce que NODE_ENV dans Express?

var app = express();
app.set('views',settings.c.WEB_PATH + '/public/templates');
app.set('view engine','ejs');
app.configure(function(){
    app.use(express.favicon());
    app.use(express.static(settings.c.WEB_PATH + '/public'));
    app.use(express.bodyParser());
    app.use(express.cookieParser());
    app.use(express.methodOverride());
    app.use(express.session({
            cookie:{ domain:"."+settings.c.SITE_DOMAIN, maxAge:1440009999},
            secret:'hamster',
            store: r_store,
            }));
    app.use(useragent.express());
    app.use(flash());
    app.use(passport.initialize());
    app.use(passport.session());
});

Ceci est mon application. Je suis en train de l'exécuter en production.

Cependant, quelqu'un m'a parlé de NODE_ENV. Dois-je l'ajouter à ce code? Comment puis-je l'ajouter?

163
TIMEX

NODE_ENV est un variable d'environnement rendu populaire par la structure express webserver. Lorsqu'une application de nœud est exécutée, elle peut vérifier la valeur de la variable d'environnement et effectuer différentes tâches en fonction de la valeur. NODE_ENV est utilisé spécifiquement (par convention) pour indiquer si un environnement particulier est une production ou un environnement de développement . Un cas d'utilisation courant consiste à exécuter du code de débogage ou de journalisation supplémentaire s'il est exécuté dans un environnement de développement.

Accéder à NODE_ENV

Vous pouvez utiliser le code suivant pour accéder vous-même à la variable d'environnement afin de pouvoir effectuer vos propres vérifications et logique:

var environment = process.env.NODE_ENV

Ou encore, utilisez express 'app.get('env') () Remarque: la valeur par défaut est "development")

Sachez que si vous n'avez pas explicitement défini NODE_ENV pour votre environnement, il s'agira de undefined.

Définition de NODE_ENV

La définition de la variable d'environnement varie d'un système d'exploitation à l'autre et dépend également de la configuration de l'utilisateur.

Si vous souhaitez définir la variable d'environnement comme élément unique, vous pouvez le faire à partir de la ligne de commande:

  • linux & mac : export NODE_ENV=production
  • fenêtres : $env:NODE_ENV = 'production'

À long terme, vous devriez persister pour que cela ne soit pas effacé si vous redémarrez - plutôt que de lister toutes les méthodes possibles pour le faire, je vous laisserai chercher comment le faire vous-même!

Convention a dicté qu'il ne fallait utiliser que deux valeurs pour NODE_ENV, soit production, soit development, toutes en minuscules. Rien ne vous empêche d'ajouter d'autres valeurs, mais ce n'est probablement pas une bonne idée, car je vois beaucoup de ce type de code dans de nombreux modules node_modules que j'utilise:

var development = process.env.NODE_ENV !== 'production';

Notez que c'est une idée vraiment mauvaise d'essayer de définir NODE_ENV à partir de dans une application de noeud elle-même - si vous le faites, cela ne s'appliquera qu'au processus à partir duquel elle a été définie , donc les choses ne fonctionneront probablement pas comme vous vous en doutez. Ne le faites pas - vous le regretterez.

324
Ed Hinchliffe

NODE_ENV est une variable d'environnement qui signifie environnement de noeud dans le serveur express.

C'est comment nous définissons et détectons dans quel environnement nous nous trouvons.

Il est très courant d'utiliser production et development.

Set:

export NODE_ENV=production

Get:

Vous pouvez l'obtenir en utilisant app.get('env')

17
Alireza

Je suppose que la question initiale comprenait comment Express utilise cette variable d’environnement.

Express utilise NODE_ENV pour modifier son propre comportement par défaut. Par exemple, en mode de développement, le gestionnaire d'erreurs par défaut renverra un stacktrace au navigateur. En mode de production, la réponse est simplement Internal Server Error, afin d'éviter toute fuite d'informations détaillées sur la mise en œuvre.

2
Randy Hudson