{{ name }}
+{{ price.toFixed(2) }} €
+Diese Seite wird über das dateibasierte Routing gefunden.
+{{ price.toFixed(2) }} €
+Produkt wird geladen …
+ ++ Das Produkt konnte nicht geladen werden. +
+ +{{ product.description }}
+ {{ product.price.toFixed(2) }} € +{{ Math.random() }}
+ +``` + +Der Server und der Browser erzeugen unterschiedliche Zahlen. Besser ist ein kontrollierter, stabiler Wert oder eine bewusst erst im Browser erzeugte Anzeige. + +### Datenabrufe doppelt verstehen + +Nicht jeder API-Aufruf sollte mit `useFetch` umgesetzt werden. Für initiale Seitendaten ist `useFetch` meist passend, für eine Aktion nach einem Button-Klick häufig `$fetch`. + +### Secrets im Browser + +Private Schlüssel und Passwörter gehören nicht in Komponenten und nicht in `runtimeConfig.public`. Browser-Code ist für den Benutzer sichtbar. + +### Server-Routen sind keine automatische Geschäftslogik + +Eine Datei unter `server/api/` ist zunächst nur ein Endpunkt. Validierung, Fehlerbehandlung, Berechtigungsprüfung, Logging und Datenbanktransaktionen müssen trotzdem sorgfältig implementiert werden. + +### Caching und veraltete Daten + +SSR, statische Generierung und Caching können zu sehr schnellen Seiten führen. Gleichzeitig muss geklärt werden: + +- Wie lange darf eine Antwort gecacht werden? +- Wann muss eine Seite neu erzeugt werden? +- Wie werden Änderungen sichtbar? +- Welche Daten sind benutzerspezifisch und dürfen niemals gemeinsam gecacht werden? + +Besonders bei Login-Daten und persönlichen Inhalten darf kein versehentliches Server-Caching stattfinden. + +### Nuxt-Konventionen lernen + +Nuxt reduziert eigenen Architekturcode, führt aber eigene Konzepte ein. Am Anfang müssen unter anderem folgende Fragen beantwortet werden: + +- Wann verwende ich `useFetch`? +- Wann läuft Code auf dem Server? +- Wie funktionieren Layouts und Middleware? +- Wo gehört ein Plugin hin? +- Wann brauche ich eine Server-Route? + +Diese Lernkurve ist der Preis für die produktive Struktur, die Nuxt bereitstellt. + +--- + +## Deployment und Betrieb + +Nuxt wird normalerweise zunächst gebaut: + +```bash +npm run build +``` + +Danach wird das erzeugte Ergebnis entsprechend der Zielumgebung gestartet. Bei einem Node-Deployment ist das Prinzip typischerweise: + +```bash +node .output/server/index.mjs +``` + +Die konkrete Bereitstellung kann beispielsweise erfolgen über: + +- eigenen Linux-Server +- Docker +- Kubernetes +- Plattformen mit Node-Unterstützung +- serverlose Plattformen +- statisches Hosting bei einer vollständig statisch generierten Website + +### Betriebspunkte + +Für eine produktive Anwendung sollten unter anderem berücksichtigt werden: + +- Umgebungsvariablen +- HTTPS +- Logging +- Monitoring +- Fehlerseiten +- Performance und Caching +- Datenbankverbindungen +- Rate Limiting bei APIs +- Sicherheitsupdates der Abhängigkeiten +- Build- und Deployment-Pipeline + +Nuxt vereinfacht den Build, nimmt aber nicht die Verantwortung für einen sicheren und stabilen Betrieb ab. + +--- + +## Wann ist Nuxt eine gute Wahl? + +Nuxt ist häufig eine gute Wahl, wenn: + +- Vue bereits verwendet wird oder im Team bekannt ist +- mehrere Seiten und ein echtes Routing benötigt werden +- SEO und initiale Ladezeit wichtig sind +- SSR, SSG oder hybride Strategien gebraucht werden +- Frontend und kleinere Server-Funktionen zusammengehören +- eine konventionelle, gut erkennbare Projektstruktur hilfreich ist +- eine interaktive Webanwendung entstehen soll + +### Wann reicht Vue mit Vite? + +Vue mit Vite kann ausreichen, wenn: + +- die Anwendung nur aus einem kleinen interaktiven Bereich besteht +- SSR nicht erforderlich ist +- SEO keine Rolle spielt +- die Architektur vollständig selbst festgelegt werden soll +- bereits ein separates Frontend-Setup vorhanden ist + +### Wann ist ein separates Backend sinnvoll? + +Ein eigenes Backend ist oft sinnvoll, wenn: + +- komplexe Geschäftslogik zentral für mehrere Clients benötigt wird +- neben der Website auch mobile Apps auf dieselbe API zugreifen +- umfangreiche Hintergrundverarbeitung erforderlich ist +- Datenbankzugriffe und Berechtigungen zentral gebündelt werden sollen +- ein vorhandenes Backend weiterverwendet wird + +Nuxt kann in diesem Fall weiterhin das Frontend und gegebenenfalls eine dünne Backend-for-Frontend-Schicht bereitstellen. + +--- + +## Zusammenfassung + +Nuxt ist ein Meta-Framework für Vue. Es verbindet Vue-Komponenten mit den Funktionen, die man beim Bau einer vollständigen Webanwendung benötigt: + +- dateibasiertes Routing +- Layouts und Middleware +- Server-Side Rendering +- Static Site Generation +- hybrides Rendering +- Datenabrufe +- SEO-Unterstützung +- Server-API-Routen +- Build und Deployment + +Der typische Denkansatz ist: + +```text +Vue → Wie baue ich die Benutzeroberfläche? +Nuxt → Wie baue und betreibe ich die gesamte Webanwendung? +Nitro → Wie läuft die Server-Seite? +Vite → Wie entwickle und baue ich das Projekt? +TypeScript→ Wie mache ich den Code sicherer und wartbarer? +``` + +Nuxt löst viele wiederkehrende Architekturprobleme, bringt dafür aber eigene Konzepte und eine Server-/Client-Komplexität mit. Wer Vue-Grundlagen beherrscht und versteht, wo Code ausgeführt wird, kann mit Nuxt sowohl klassische Websites als auch umfangreiche interaktive Anwendungen entwickeln. + +### Empfohlener Lernweg + +1. JavaScript- und TypeScript-Grundlagen lernen. +2. Vue-Komponenten, Templates und Reaktivität verstehen. +3. Eine kleine Vue-Anwendung bauen. +4. Ein Nuxt-Projekt mit `pages/` und `components/` erstellen. +5. Navigation und dynamische Routen ergänzen. +6. Daten mit `useFetch` laden. +7. Eine eigene `server/api/`-Route schreiben. +8. SSR, SSG und Hydration vergleichen. +9. Authentifizierung und serverseitige Berechtigungen ergänzen. +10. Die Anwendung bauen, deployen und beobachten. + +Der wichtigste praktische Lernschritt ist, eine kleine Anwendung vollständig umzusetzen: zum Beispiel eine Produktliste mit Detailseiten, Loading- und Fehlerzuständen, einer Server-Route und einer geschützten Admin-Seite.