Настройки и переменные окружения
Порт, секретные ключи и путь к базе различаются на вашем компьютере и на сервере. Вписывать их в код нельзя: секреты попадут в Git, а для смены порта придётся править файлы. Такие значения передают через переменные окружения — пары «имя=значение», которые операционная система выдаёт процессу при запуске.
Файл .env
Создайте в корне проекта файл .env:
PORT=3000
SESSION_SECRET=длинная-случайная-строка-для-сессий
JWT_SECRET=другая-длинная-случайная-строка
DATABASE_FILE=blog.dbСразу добавьте его в .gitignore, чтобы он не попал в репозиторий:
node_modules/
.env
blog.dbЗагрузка файла
Node.js 22 сам умеет читать .env — флаг --env-file передаёт значения в процесс. Обновите скрипт в package.json:
{
"scripts": {
"dev": "node --watch --env-file=.env src/server.js",
"start": "node src/server.js"
}
}Отдельный пакет вроде dotenv не нужен. На рабочем сервере переменные обычно задаются средствами хостинга или менеджера процессов, поэтому в start флага нет.
Модуль настроек
Чтобы не разбрасывать process.env по всему коду, соберите настройки в одном файле src/config.js:
// src/config.js
function required(name) {
const value = process.env[name];
if (!value) {
throw new Error(`Не задана переменная окружения ${name}`);
}
return value;
}
export const config = {
port: Number(process.env.PORT ?? 3000),
isProduction: process.env.NODE_ENV === 'production',
sessionSecret: required('SESSION_SECRET'),
jwtSecret: required('JWT_SECRET'),
databaseFile: process.env.DATABASE_FILE ?? 'blog.db',
};Если обязательной переменной нет, приложение остановится сразу при запуске с понятным сообщением, а не упадёт позже на первом входе пользователя.
Использование
Остальные файлы импортируют config вместо прямого обращения к process.env:
// src/server.js
import app from './app.js';
import { config } from './config.js';
app.listen(config.port, () => {
console.log(`Сервер запущен: http://localhost:${config.port}`);
});Так же в src/app.js передайте config.sessionSecret в session(), а в src/db.js — config.databaseFile в new Database(). Поменяйте PORT в .env на 4000, и после перезапуска сервер откроется на http://localhost:4000.
Пример для коллег
Раз .env не попадает в Git, создайте рядом файл .env.example с теми же именами, но без настоящих значений. Новый разработчик скопирует его в .env и впишет свои.
Частая ошибка
Все переменные окружения — строки. Запись DEBUG=false даёт строку 'false', а она в условии считается истинной: if (process.env.DEBUG) выполнится. Сравнивайте явно — process.env.DEBUG === 'true' — и превращайте числа через Number(), как с портом в config.js.