Вынеси конфигурацию из кода с помощью dotenv, раздели разработку и продакшен и не пускай секреты в Git.
Открыть этот урок в KodokonПорт прослушивания, URL базы данных, ключи API: ничему из этого не место в исходном коде. Эти значения меняются между твоей машиной и продакшеном, а некоторые из них - секреты. Стандартное решение: переменные окружения, которые в разработке загружаются из файла .env. Установи dotenv командой npm install dotenv, затем создай файл в корне проекта.
PORT=3000
DATABASE_URL=postgres://localhost:5432/kodokon
SESSION_SECRET=change-this-valueИмпортируй dotenv/config в самом начале точки входа: переменные из файла копируются в process.env. Хорошая профессиональная привычка: собрать чтение в одном модуле конфигурации, проверять переменные при старте и падать сразу, если какой-то не хватает. Сервер, который отказывается стартовать, лучше сервера, который падает на первом же запросе.
import "dotenv/config";
const required = ["PORT", "SESSION_SECRET"];
for (const name of required) {
if (!process.env[name]) {
throw new Error("Missing variable: " + name);
}
}
export const config = {
port: Number(process.env.PORT),
secret: process.env.SESSION_SECRET,
isProd: process.env.NODE_ENV === "production"
};В продакшене файла .env нет: реальные значения даёт хостинг, а NODE_ENV равен production. Используй config.isProd, чтобы менять поведение: подробные логи в разработке, сдержанные сообщения об ошибках в продакшене. И ещё закоммить файл .env.example со списком ожидаемых переменных и фиктивными значениями: он документирует конфигурацию, не раскрывая секретов.
import express from "express";
import { config } from "./config.js";
const app = express();
if (!config.isProd) {
console.log("Development mode");
}
app.listen(config.port, () => {
console.log("Port: " + config.port);
});.env, игнорируемый Git.env.example?.gitignore