← Der IaGenify-Weg

Backend

02 · 2–3 Wochen

Mache aus einem Nutzererlebnis eine zuverlässige Anwendung mit Serverlogik, Identität und Daten.

Bewerben↗
Node.jsExpressMongoDB

Backend, umgesetzt in echter Arbeit.

Mache aus einem Nutzererlebnis eine zuverlässige Anwendung mit Serverlogik, Identität und Daten.

Mach aus einer Oberfläche eine Anwendung, die reagiert und Daten behält.

Die Backend-Stufe verlagert Anwendungslogik auf den Server und verbindet sie mit dauerhaften Daten und Identität – mit Node.js, Express und MongoDB.

Die Grenze zum Server definieren

Ein Backend bietet der Oberfläche einen verlässlichen Ort, um Aufgaben auszuführen. Mit Node.js und Express lernst du, wie eine Route eine Anfrage empfängt, Anwendungslogik ausführt und eine nützliche Antwort liefert. Eine klare Grenze trennt Darstellung von Regeln und Datenverarbeitung.

Daten dauerhaft verfügbar machen

MongoDB führt dokumentorientierte Datenspeicherung ein. Entscheidend ist, welche Informationen zusammengehören, wie Datensätze mit der Anwendung verbunden sind und wie der Server sie liest oder aktualisiert. Eine durchdachte Datenschicht macht die Anwendung über eine einzelne Browsersitzung hinaus nützlich.

Identität mit geschützten Aktionen verbinden

Authentifizierung gehört zum Anwendungsablauf und ist mehr als eine Anmeldeseite. JWT und Google OAuth übernehmen unterschiedliche Aufgaben: Das eine steht für eine authentifizierte Sitzung, das andere ermöglicht die Identitätsfeststellung über Google. Diese Stufe verbindet Routen, Daten und Identität zu einer dynamischen Anwendung.

Vom Konzept zu funktionierendem Code

Diese Ausschnitte zeigen, wie die Inhalte jeder Stufe in echten Projekten aussehen. Sie sind Ausgangspunkte zum Lesen, Hinterfragen, Anpassen und Testen — kein Code zum blinden Kopieren.

An der Servergrenze validieren

Die Route liest die Workshop-ID aus der URL und prüft Eingaben vor dem Schreiben. Ungültige Eingaben, ein fehlender Workshop und eine erfolgreiche Erstellung erhalten unterschiedliche HTTP-Statuscodes.

router.post("/workshops/:id/registrations", async (req, res) => {
  const { name, email } = req.body;
  const workshopId = req.params.id;

  if (!name?.trim() || !/^\S+@\S+\.\S+$/.test(email ?? "")) {
    return res.status(400).json({ error: "Name and valid email required." });
  }

  const workshop = await workshops.findOne({ _id: workshopId });
  if (!workshop) return res.status(404).json({ error: "Workshop not found." });

  const registration = await registrations.insertOne({
    workshopId,
    name: name.trim(),
    email: email.toLowerCase(),
    createdAt: new Date(),
  });

  return res.status(201).json({ id: registration.insertedId });
});

Datenzugriff in einem Repository bündeln

Das Repository verwaltet MongoDB-Operationen und bietet dem Rest der Anwendung eine kleine Schnittstelle. So bleibt die Route verständlich und Speicherung lässt sich zentral ändern oder testen.

export function createRegistrationRepository(db) {
  const registrations = db.collection("registrations");

  return {
    async create(input) {
      const result = await registrations.insertOne({
        workshopId: input.workshopId,
        name: input.name.trim(),
        email: input.email.toLowerCase(),
        status: "pending",
        createdAt: new Date(),
      });

      return { id: result.insertedId.toString(), status: "pending" };
    },

    findForWorkshop(workshopId) {
      return registrations.find({ workshopId }).toArray();
    },
  };
}
Lesen und selbst anpassen

Ändere eine Anforderung, überlege dir das Ergebnis und überprüfe deine Annahme durch Ausführen. Erkläre im Review deine Entscheidung und eine mögliche nächste Verbesserung.

KERNTECHNOLOGIEN
  • Node.js
  • Express
  • MongoDB
  • JWT
  • Google OAuth