На самом деле, я бы не рекомендовал хранить конфигурационные значения как информация о соединении с базой данных, пароли, токены доступа и таковые внутри фактического кода приложения по следующим причинам:
Hardcoding эти значения затрудняют их изменение позже. Вам нужно будет выпустить новую версию приложения, чтобы изменить эти значения.
Это серьезное нарушение безопасности, поскольку данные конфигурации и пароли производственного класса не должны храниться в коде. Очень легко протекать эти конфиденциальные данные.
Лучшим подходом было бы экстернализировать эти данные и передать их вашему приложению во время выполнения. Обычно это делается с помощью переменных среды. Вам просто нужно определить уникальную переменную окружения для каждого мира данных, который должен изменяться между различными средами.
Например: DB_HOST
, DB_USER
, DB_PASSWORD
.Тогда вы могли бы передать эти ценности вам приложение в производстве так:
$ NODE_ENV=production DB_HOST=1.2.3.4 DB_USER=someusername DB_PASSWORD=somerandompassword /bin/node app.js
На самом деле, это значение может быть зашифрованы и добавляемый к кодовому, а затем расшифрованному во время развертывания. Однако убедитесь, что ключ дешифрования надежно хранится в системе развертывания или предоставляется интерактивно инженером по выпуску. Shippable allows to do this из коробки.
В среде разработки это становится проще, потому что вы можете использовать очень удобный dotenv
module. Просто создайте .env
файл в корневом каталоге вашего проекта и добавить все переменные к нему:
DB_HOST=1.2.3.4
DB_USER=someusername
DB_PASSWORD=somerandompassword
Но, убедитесь, чтобы исключить его из вас VCS, потому что каждый разработчик, вероятно, хотел бы иметь персональную конфигурацию. Вы можете создать файл .env.dist
, который будет содержать конфигурацию по умолчанию, которую позже можно было бы использовать в качестве шаблона: cp .env.dist .env
.
Кроме того, я реализовал многоразовый модуль, который позволяет автоматически определять среду, анализируя как CLI аргументы и переменную NODE_ENV. Это может быть полезно на вашей машине разработки, потому что вы можете легко изменить среду, передав аргумент CLI вашей программе Node.js следующим образом: $ node app.js --prod
. Это также приятно использовать с Gulp: $ gulp build --prod
.
Подробнее см. Более подробную информацию и варианты использования на detect-environment
's page.
Является ли ваш node.js приложением HTTP-сервера? –
Да, это так. Также имеет соединение с mongodb. – guiomie