В этом руководстве вы узнаете, как читать переменные среды, используя свойство 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для доступа к ним.
