Подтвердить что ты не робот

Node.js, выражать и использовать разработку и производство в app.configure

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

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 });
});
4b9b3361

Ответ 1

Ваш подход в порядке, но вы можете сделать что-то более общее, например, хранить данные конфигурации для 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 });
});

Update:

Экспресс будет знать, в какой среде вы находитесь, просматривая переменную 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 вручную в ваше приложение node перед кодом Express или поместив этот env var в ~/.profile, например Сказал Рикардо.

Ответ 2

Чтобы расширить идею использования файла config.json:

// 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), и таким образом переменная конфигурации имеет настройки, соответствующие серверу, на котором он выполняется.

Ответ 3

Просто установите переменную среды NODE_ENV в production или development, как показано в экспресс-документах: http://expressjs.com/guide.html#configuration

Я просто оставлю NODE_ENV=development в dev-машине ~/.profile (.bashrc или bash_profile в linux) и сделаю то же самое для production.

Ответ 4

Я сделал что-то еще более всеобъемлющее, заказав источники таких параметров:

    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 и значения по умолчанию.

Ответ 5

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

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

И запустите свой сервер с помощью

набор экспорта NODE_ENV = production && & npm start