Hole die Konfiguration mit dotenv aus dem Code heraus, trenne Entwicklung von Produktion und halte deine Geheimnisse aus Git heraus.
Diese Lektion in Kodokon öffnenDer Port, auf dem gelauscht wird, die Datenbank-URL, die API-Schlüssel: Nichts davon gehört in den Quellcode. Diese Werte ändern sich zwischen deinem Rechner und der Produktion, und manche davon sind Geheimnisse. Die Standardlösung: Umgebungsvariablen, die in der Entwicklung aus einer .env-Datei geladen werden. Installiere dotenv mit npm install dotenv und erstelle die Datei dann im Wurzelverzeichnis des Projekts.
PORT=3000
DATABASE_URL=postgres://localhost:5432/kodokon
SESSION_SECRET=change-this-valueImportiere dotenv/config ganz am Anfang deines Einstiegspunkts: Die Variablen der Datei werden nach process.env kopiert. Eine gute professionelle Gewohnheit: das Lesen in einem einzigen Konfigurationsmodul bündeln, die Variablen beim Start validieren und sofort abbrechen, wenn eine fehlt. Ein Server, der sich weigert zu starten, ist besser als ein Server, der bei der ersten Anfrage abstürzt.
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"
};In der Produktion gibt es keine .env-Datei: Der Hoster liefert die echten Werte und NODE_ENV steht auf production. Nutze config.isProd, um das Verhalten anzupassen: ausführliche Logs in der Entwicklung, zurückhaltende Fehlermeldungen in der Produktion. Committe außerdem eine Datei .env.example, die die erwarteten Variablen mit Platzhalterwerten auflistet: Sie dokumentiert die Konfiguration, ohne die Geheimnisse preiszugeben.
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-Datei, die von Git ignoriert wird.env.example?.gitignore hinzufügen