Как читать переменные среды в Node.js модуля process

В этом руководстве вы узнаете, как читать переменные среды, используя свойство 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 для доступа к ним.
Рейтинг
( Пока оценок нет )
Александр Русаков / автор статьи
Программист, разработчик, 12 лет опыта работы в крупных компаниях. Быстро освоил typescript, делюсь своими знаниями на страницах этого сайта.
Загрузка ...
JavaScript и TypeScript