Ceci est mon application, je suis actuellement en production.
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());
});
Cependant, j'ai appris à le connaître NODE_ENV
et je veux l'utiliser. Comment puis-je faire ceci?
javascript
node.js
express
TIMEX
la source
la source
app.configure('development', ...)
ou "production" pour définir certains paramètres uniquement pour les environnements de développement ou de production. Voir expressjs.com/api.html#app.configureRéponses:
NODE_ENV
est une variable d'environnement rendue populaire par le framework de serveur Web express . Lorsqu'une application de nœud est exécutée, elle peut vérifier la valeur de la variable d'environnement et faire différentes choses en fonction de la valeur.NODE_ENV
spécifiquement est utilisé (par convention) pour indiquer si un environnement particulier est un environnement de production ou de développement . Un cas d'utilisation courant est l'exécution d'un 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 bien en utilisant express '
app.get('env')
( note: par défaut"development"
)Sachez que si vous ne l'avez pas défini explicitement
NODE_ENV
pour votre environnement, il le seraundefined
.Définition de NODE_ENV
La manière de définir réellement 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 une variable unique, vous pouvez le faire à partir de la ligne de commande:
export NODE_ENV=production
$env:NODE_ENV = 'production'
À long terme, vous devriez persister afin qu'il ne se désactive pas si vous redémarrez - plutôt que de lister toutes les méthodes possibles pour le faire, je vous laisse chercher comment le faire vous-même!
La convention a dicté qu'il n'y a que deux valeurs que vous devez utiliser pour
NODE_ENV
, soitproduction
oudevelopment
, toutes les minuscules. Rien ne vous empêche d'ajouter plus de valeurs, mais ce n'est probablement pas une bonne idée, car je vois beaucoup de ce type de code dans la plupart des node_modules que j'utilise:Notez que c'est une très mauvaise idée d'essayer de mettre
NODE_ENV
de l' intérieur d' une application nœud lui - même - si vous le faites il ne s'appliquera au processus à partir duquel il a été mis , donc les choses ne fonctionneront probablement pas comme vous les attendre à. Ne le faites pas, vous le regretterez.la source
app.configure()
a été supprimé. Le guide de migration Express 4 recommande «d'utiliserprocess.env.NODE_ENV
ouapp.get('env')
de détecter l'environnement et de configurer l'application en conséquence».app.get('env')
précisément pour cette raison. Cela dissimule que cette variable importante n'est pas définie - ce qui rend les choses incohérentes lorsque vous y accédez de l'extérieur d'express. De plus, je pense qu'il est moins dangereux que le code de débogage ne s'exécute pas accidentellement sur un environnement de développement que de le faire fonctionner accidentellement sur un environnement de production.development
cela signifie, entre autres, que les modèles seront retraités pour chaque demande. La conséquence est un gain ou une perte de performances d'environ 75% entre la production et le développement lors de l'utilisation de Jade. J'ai également créé un article de blog sur apmblog.dynatrace.com/2015/07/22/…NODE_ENV est une variable d'environnement qui signifie environnement de nœud dans un serveur express.
C'est ainsi que nous définissons et détectons l'environnement dans lequel nous nous trouvons.
Il est très courant d'utiliser
production
etdevelopment
.Ensemble:
Avoir:
Vous pouvez l'obtenir en utilisant
app.get('env')
la source
Je suppose que la question originale comprenait comment Express utilise cette variable d'environnement.
Express utilise NODE_ENV pour modifier son propre comportement par défaut. Par exemple, en mode développement, le gestionnaire d'erreurs par défaut renverra une trace de pile au navigateur. En mode production, la réponse est simplement
Internal Server Error
d'éviter de divulguer les détails d'implémentation au monde.la source
En règle générale, vous utilisez la
NODE_ENV
variable pour effectuer des actions spéciales lorsque vous développez, testez et déboguez votre code. Par exemple, pour produire une journalisation détaillée et une sortie de débogage dont vous ne voulez pas en production. Express lui-même se comporte différemment selon qu'ilNODE_ENV
est défini surproduction
ou non. Vous pouvez voir cela si vous placez ces lignes dans une application Express, puis faites une requête HTTP GET à/error
:Notez que ce dernier
app.use()
doit être le dernier, après tous les autres gestionnaires de méthodes!Si vous définissez
NODE_ENV
surproduction
avant de démarrer votre serveur, puis que vous lui envoyez uneGET /error
requête, vous ne devriez pas voir le texteForcing an error!
dans la console et la réponse ne doit pas contenir de trace de pile dans le corps HTML (qui provient d'Express). Si, à la place, vous définissezNODE_ENV
autre chose avant de démarrer votre serveur, le contraire devrait se produire.Sous Linux, définissez la variable d'environnement NODE_ENV comme ceci:
la source