Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как прочитать переменную окружения в Node.js

Короткий ответ

Все переменные окружения лежат в объекте process.env. Отсутствующая переменная равна undefined, поэтому добавьте значение по умолчанию:

const port = process.env.APP_PORT ?? '3000';
const mode = process.env.APP_MODE ?? 'development';
 
console.log(port, mode);

Результат:

3000 development

Числа и флаги

Значения — всегда строки. Преобразуйте их сами:

process.env.MAX_USERS = '50';
process.env.DEBUG = 'false';
 
const maxUsers = Number(process.env.MAX_USERS);
const debug = process.env.DEBUG === 'true';
 
console.log(maxUsers + 1, debug);

Результат:

51 false

Переменная для одного запуска

В терминале переменную задают перед командой. В Windows PowerShell синтаксис другой:

APP_PORT=8080 node server.js
 
# Windows PowerShell
$env:APP_PORT=8080; node server.js

Файл .env

Node.js умеет сам загружать переменные из файла .env с флагом --env-file:

# .env
DATABASE_URL=postgres://localhost/shop
API_KEY=test-key
 
node --env-file=.env app.js

Частая ошибка

Обязательная переменная, которой нет, должна сразу остановить программу с понятным сообщением, а не вызвать ошибку где-то в глубине кода:

const required = (name) => {
  const value = process.env[name];
  if (!value) throw new Error(`Environment variable ${name} is not set`);
  return value;
};
 
try {
  required('SOME_MISSING_VARIABLE');
} catch (error) {
  console.log(error.message);
}

Результат:

Environment variable SOME_MISSING_VARIABLE is not set

Функции из этого ответа

  • Nullish coalescing (??) — Возвращает значение справа, если слева null или undefined.
  • Number() — Превращает значение в число.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.