Это мое приложение, я сейчас работаю на производстве.
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());
});
Тем не менее, я узнал NODE_ENV
и хочу использовать его. Как я могу это сделать?
javascript
node.js
express
TIMEX
источник
источник
app.configure('development', ...)
или «производство», чтобы установить определенные параметры только для среды разработки или производства. См. Expressjs.com/api.html#app.configureОтветы:
NODE_ENV
это переменная окружения, ставшая популярной в среде экспресс- веб-сервера. Когда приложение узла запускается, оно может проверять значение переменной среды и выполнять различные действия в зависимости от значения.NODE_ENV
специально используется (по соглашению), чтобы указать, является ли конкретная среда производственной или средой разработки . Распространенным вариантом использования является выполнение дополнительного кода отладки или регистрации, если он выполняется в среде разработки.Доступ к NODE_ENV
Вы можете использовать следующий код для доступа к переменной среды самостоятельно, чтобы вы могли выполнять свои собственные проверки и логику:
var environment = process.env.NODE_ENV
Или, в качестве альтернативы, используйте express '
app.get('env')
( примечание: по умолчанию это"development"
)Имейте в виду, что если вы явно не установили
NODE_ENV
для своей среды, это будетundefined
.Настройка NODE_ENV
Как на самом деле установить переменную среды, зависит от операционной системы и зависит от ваших пользовательских настроек.
Если вы хотите установить переменную среды как разовую, вы можете сделать это из командной строки:
export NODE_ENV=production
$env:NODE_ENV = 'production'
В долгосрочной перспективе вы должны сохранить это, чтобы оно не сбрасывалось при перезагрузке - вместо того, чтобы перечислить все возможные способы сделать это, я позволю вам найти, как это сделать самостоятельно!
Конвенция dictacted , что есть только два значения , которые следуют использовать для
NODE_ENV
, либоproduction
илиdevelopment
, строчных букв. Ничто не мешает вам добавлять дополнительные значения, но это, вероятно, не очень хорошая идея, так как я вижу много такого кода во многих модулях node_module, которые я использую:Обратите внимание , что это действительно плохая идея , чтобы попытаться установить
NODE_ENV
из внутри самого приложения узла - если вы делаете это будет применяться только к процессу , из которого он был установлен , так что вещи , вероятно , не будет работать , как вы ожидаете их. Не делай этого - ты пожалеешь об этом.источник
app.configure()
был удален. Руководство по миграции Express 4 рекомендует «использоватьprocess.env.NODE_ENV
илиapp.get('env')
обнаруживать среду и настраивать приложение соответствующим образом».app.get('env')
именно по этой причине. В нем рассказывается, что эта важная переменная не установлена, что делает вещи непоследовательными, когда вы обращаетесь к ней извне экспресса. Более того, я думаю, что менее опасно, что случайно отладочный код не запускается в среде разработки, чем случайно запускать его в производственной среде.development
среди прочего, означает, что шаблоны будут обрабатываться для каждого запроса. Следствием этого является увеличение или уменьшение производительности на ~ 75% между производством и разработкой при использовании Jade. Я также создал сообщение в блоге на этом apmblog.dynatrace.com/2015/07/22/…NODE_ENV - это переменная среды, которая обозначает среду узла в экспресс-сервере.
Это то, как мы устанавливаем и определяем, в какой среде мы находимся.
Это очень распространенное использование
production
иdevelopment
.Устанавливать:
Получить:
Вы можете получить это используя
app.get('env')
источник
Я предполагаю, что первоначальный вопрос включал, как Express использует эту переменную среды.
Express использует NODE_ENV для изменения своего поведения по умолчанию. Например, в режиме разработки обработчик ошибок по умолчанию отправит обратно трассировку стека в браузер. В производственном режиме ответ прост
Internal Server Error
, чтобы избежать утечки деталей реализации миру.источник
Как правило, вы используете эту
NODE_ENV
переменную для выполнения специальных действий при разработке, тестировании и отладке кода. Например, для создания подробных записей журнала и отладки, которые вы не хотите использовать в производстве. Сама экспрессия ведет себя по-разному в зависимости от тогоNODE_ENV
, установленоproduction
или нет. Это можно увидеть, если вы поместите эти строки в приложение Express, а затем сделаете HTTP-запрос GET для/error
:Обратите внимание, что последний
app.use()
должен быть последним после всех других обработчиков методов!Если вы установили
NODE_ENV
значениеproduction
перед запуском сервера и затем отправили емуGET /error
запрос, вы не должны видеть текстForcing an error!
в консоли, а ответ не должен содержать трассировку стека в теле HTML (которое происходит из Express). Если вместо этого вы устанавливаетеNODE_ENV
что-то другое перед запуском сервера, должно произойти обратное.В Linux установите переменную среды NODE_ENV следующим образом:
источник