Как прочитать переменную окружения в 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() — Превращает значение в число.