В этом руководстве вы узнаете, как читать переменные среды, используя свойство Node.js process.env
модуля process
.
В Node.js process
является основным модулем. Модуль process
имеет свойство env
, которое содержит все переменные среды.
Чтобы установить переменную среды в Windows, используйте команду SET
. Например:
SET NODE_ENV=development
В macOS или Linux вы используете команду EXPORT
:
EXPORT NODE_ENV=development
В этом синтаксисе NODE_ENV
— это переменная среды со значением ‘development’.
Чтобы получить доступ к NODE_ENV
в Node.js, вы используете process.env
следующим образом:
process.env.NODE_ENV
В этом примере proces.env.NODE_ENV
возвращает строку 'development'
.
Если NODE_ENV
не установлен, process.env.NODE_ENV
вернет значение undefined
.
В следующем операторе используется логический оператор ИЛИ для возврата текущей среды или development
Node.js, если NODE_ENV
не установлен:
const nodeEnv = process.env.NODE_ENV || 'development';
Хорошей практикой является хранение учетных данных, таких как имя пользователя и пароль базы данных, в переменных среды.
Давайте рассмотрим несколько практических примеров использования Node.js process.env
.
Использование переменных среды для безопасного хранения учетных данных
В следующем примере показано, как использовать process.env
для доступа к текущей среде Node.js и соответствующей загрузки конфигурации.
Структура проекта будет выглядеть так:
├── config | ├── app.js | ├── development.js | └── production.js ├── index.js └── package.json
- Сначала создайте новую папку с именем
env
. - Во-вторых, запустите команду
npm init
, чтобы инициализировать новый пакет:
npm init --yes
- В-третьих, создайте новую папку с именем
config
внутри корневого каталога проекта:
mkdir config
- В-четвертых, создайте три файла
app.js,
development.js
иproduction.js
в папкеconfig
. Вdevelopment.js
хранятся учетные данные базы данных в среде разработки:
module.exports = { database: { host: "localhost", port: 27017, username: "admin", password: "Password1", }, };
В файле production.js
хранится та же информация, что и в файле development.js
. Однако вместо этого он использует переменные среды:
module.exports = { database: { host: process.env.DB_HOST, port: process.env.DB_PORT, username: process.env.DB_USERNAME, password: process.env.DB_PASSWORD, }, };
Вы должны установить переменные среды DB_HOST
, DB_PORT
, DB_USERNAME
и DB_PASSWORD
в рабочей среде.
Обратите внимание: если вы сохраните конфиденциальную информацию в файле production.js
и передадите ее в общедоступный репозиторий, вы поставите под угрозу безопасность приложения.
Для app.js
потребуется production.js
или development.js
, в зависимости от текущей среды Node.js:
let config; const nodeEnv = process.env.NODE_ENV || "development"; if(nodeEnv === "devlopment") { config = require("./development.js"); } else { config = require("./production.js"); } module.exports = config;
В-пятых, загрузите информацию о конфигурации из app.js
в файл index.js
:
const config = require("./config/app.js"); console.log(config);
Использование переменных среды для контроля запуска кода
Иногда вам может понадобиться выполнить некоторый код в среде разработки, но не в производственной среде.
Например, вы можете захотеть показать отладочную информацию в среде разработки, но не в производственной среде.
Для этого вы можете использовать process.env
для доступа к переменной среды DEBUG
. Например:
- Во-первых, создайте новый модуль с именем
debug.js
и определите функцию, которая регистрирует информацию только при установкеDEBUG
:
module.exports =(data, level = "info") => { if(!process.env.DEBUG) return; switch(level) { case "info": console.info(data); break; case "error": console.error(data); break; case "warning": console.warn(data); break; default: console.log(data); } };
- Во-вторых, загрузите
debug.js
в файлindex.js
:
const debug = require("./debug");
- В-третьих, покажите в консоли некоторую отладочную информацию:
const debug = require("./debug"); debug("The app is starting....");
Если вы установите для переменной среды DEBUG
значение true, вы увидите вывод.
Заключение
process
является основным модулем Node.js. Свойствоprocess.env
содержит все переменные среды.- Храните конфиденциальную информацию в переменных окружения и используйте
process.env
для доступа к ним.