Вопрос по express, node.js – Node.js, экспресс и использование разработки в сравнении с производством в app.configure

31

Какой самый простой способ сообщить экспрессу, в какой среде я нахожусь? Например. Я хочу сделать следующее, чтобы установить соединение с Redis в зависимости от того, в какой среде я нахожусь. Это можно сделать из командной строки?

app.configure('development', function(){
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
  var r = require("redis").createClient(6379,'127.0.0.1');
});
app.configure('production', function(){
  app.use(express.errorHandler());
  r = redis.createClient(6379,'46.137.195.230', { detect_buffers: true });
});

Ваш Ответ

5   ответов
24

// config.json
{
  "development": {
    "redisPort": 6379,
    "redisHost": "127.0.0.1",
    "errorHandlerOptions": {"dumpExceptions": true, "showStack": true}
  },
  "production": {
    "redisPort": 6379,
    "redisHost": "46.137.195.230",
    "errorHandlerOptions": {"dumpExceptions": false, "showStack": false}
  }
}

Загрузите файл конфигурации и переключитесь на основе env.

// app.js
var config = require('./config.json')[app.get('env')];
app.use(express.errorHandler(config.errorHandlerOptions));
var r = require("redis").createClient(config.redisPort,config.redisHost);

Убедитесь, что NODE_ENV установлен на каждом сервере (см. Другие ответы, один из способов:NODE_ENV=production node app.js), и таким образом переменная config имеет настройки, соответствующие серверу, на котором она работает.

28

но вы можете сделать что-то более общее, например, сохранить данные конфигурации для Redis в файле или передать хост и порт в виде аргументов:

node app.js REDIS_HOST REDIS_PORT

Затем в вашем приложении вы можете получить их, используя process.argv:

app.configure('development', function(){
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
  var r = require("redis").createClient(process.argv[2], process.argv[3]);
});
app.configure('production', function(){
  app.use(express.errorHandler());
  var r = require("redis").createClient(process.argv[2], process.argv[3], { detect_buffers: true });
});

Обновить:

Express узнает, в какой среде вы находитесь, посмотрев на переменную NODE_ENV (process.env.NODE_ENV):https://github.com/visionmedia/express/blob/master/lib/application.js#L55

Вы можете установить эту переменную при запуске приложения следующим образом:NODE_ENV=production node app.js (рекомендуется), установив process.env.NODE_ENV вручную в приложении узла перед кодом Express или поместив этот env var в ~ / .profile, как сказал Рикардо.

Error: User Rate Limit Exceeded
9

    var env = process.argv[2] || process.env.NODE_ENV || 'development'
    var mongourl = process.argv[3] || process.env.NODE_DB || 'mongodb://localhost/default'
    var port = process.env.PORT || 9001

Таким образом, вы можете использовать аргументы командной строки, настройки env и значения по умолчанию.

Error: User Rate Limit Exceededprocess.env.NODE_ENV = process.argv[2]Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededvar env =Error: User Rate Limit Exceededvar env = process.env.NODE_ENV =Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
0

который позволяет создавать несколько файлов конфигурации https://www.npmjs.com/package/config

Например, default.json, production.json

И запусти свой сервер с

экспортный набор NODE_ENV = production & amp; & amp; начало вечера

17

NODE_ENV переменная окруженияproduction или жеdevelopmentкак видно в экспрессе & apos; документы:http://expressjs.com/guide.html#configuration

Я просто ухожуNODE_ENV=development в машине разработчика~/.profile (.bashrc или bash_profile в Linux) и сделать то же самое дляproduction из них.

Error: User Rate Limit Exceededexpressjs.com/api.html#app.set
Error: User Rate Limit Exceededexpressjs.com/en/advanced/…

Похожие вопросы