Skip to content

Kapitel 10: Nuxt-Ökosystem integrieren

In diesem Kapitel lernen Sie, wie Sie Styling-Lösungen, API-Anfragen, Berechtigungsverwaltung und mehr in Nuxt 3 integrieren.


10.1 Styling-Lösungen

Option 1: SCSS/SASS

Installieren:

bash
pnpm add -D sass

Verwendung in Komponenten:

vue
<style lang="scss" scoped>
$primary-color: #00dc82;

.my-component {
  color: $primary-color;

  &:hover {
    color: darken($primary-color, 10%);
  }
}
</style>

Option 2: CSS-Module

Datei: assets/scss/main.scss

scss
// Globale Variablen
$primary: #00dc82;
$font-stack: 'Arial', sans-serif;

// Globale Styles
body {
  font-family: $font-stack;
  margin: 0;
  padding: 0;
}

In nuxt.config.ts importieren:

typescript
export default defineNuxtConfig({
  css: ['~/assets/scss/main.scss']
})

Option 3: Tailwind CSS

Installieren:

bash
pnpm add -D @nuxtjs/tailwindcss tailwindcss postcss autoprefixer

In nuxt.config.ts konfigurieren:

typescript
export default defineNuxtConfig({
  modules: [
    '@nuxtjs/tailwindcss'
  ]
})

Verwendung:

vue
<template>
  <div class="min-h-screen bg-gray-100 flex items-center justify-center">
    <div class="bg-white p-8 rounded-lg shadow-md">
      <h1 class="text-2xl font-bold mb-4">Tailwind CSS</h1>
      <button class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded">
        Button
      </button>
    </div>
  </div>
</template>

10.2 API-Anfragen integrieren (Axios)

Nuxt 3 verwendet standardmäßig fetch/$fetch. Wenn Sie Axios bevorzugen:

Installieren:

bash
pnpm add @nuxtjs/axios

In nuxt.config.ts:

typescript
export default defineNuxtConfig({
  modules: [
    '@nuxtjs/axios'
  ],
  axios: {
    baseURL: 'https://api.example.com'
  }
})

Verwendung:

vue
<script setup>
const { $axios } = useNuxtApp()

const fetchData = async () => {
  try {
    const response = await $axios.get('/posts')
    console.log(response.data)
  } catch (error) {
    console.error(error)
  }
}
</script>

10.3 Berechtigungsverwaltung (Auth)

Route-Guards (Middleware)

middleware/auth.ts:

typescript
export default defineNuxtRouteMiddleware((to, from) => {
  // Prüfen, ob Token existiert
  const token = useCookie('auth_token')

  if (!token.value && to.path !== '/login') {
    // Nicht eingeloggt → zur Login-Seite weiterleiten
    return navigateTo('/login')
  }
})

In einer Seite verwenden:

vue
<script setup>
definePageMeta({
  middleware: ['auth']  // Verwendet middleware/auth.ts
})
</script>

Rollenbasierte Zugriffskontrolle

middleware/admin.ts:

typescript
export default defineNuxtRouteMiddleware((to, from) => {
  const user = useState('user', () => null)

  if (!user.value || user.value.role !== 'admin') {
    return navigateTo('/unauthorized')
  }
})

10.4 Fehlerbehandlung & Logging

Fehlerseiten anpassen

error.vue (im Root-Verzeichnis):

vue
<script setup>
const props = defineProps({
  error: Object
})

const handleError = () => {
  clearError({ redirect: '/' })
}
</script>

<template>
  <div class="error-page">
    <h1>{{ error.statusCode }}</h1>
    <p>{{ error.message }}</p>
    <button @click="handleError">Zur Startseite</button>
  </div>
</template>

<style scoped>
.error-page {
  text-align: center;
  padding: 100px 20px;
}

h1 {
  font-size: 5em;
  color: #00dc82;
}
</style>

Logging (Console/Ecosystem)

plugins/logger.ts:

typescript
export default defineNuxtPlugin(() => {
  const logger = {
    info: (message: string) => {
      console.log(`[INFO] ${message}`)
    },
    error: (message: string, error?: any) => {
      console.error(`[ERROR] ${message}`, error)
    }
  }

  return {
    provide: {
      logger
    }
  }
})

Verwendung:

vue
<script setup>
const { $logger } = useNuxtApp()

$logger.info('Seite geladen')
</script>

10.5 Drittanbieter-Plugins integrieren

Beispiel: Rich Text Editor (TipTap)

Installieren:

bash
pnpm add @tiptap/vue-3 @tiptap/starter-kit

Verwendung:

vue
<script setup>
import { useEditor, EditorContent } from '@tiptap/vue-3'
import StarterKit from '@tiptap/starter-kit'

const editor = useEditor({
  content: '<p>Ich bin ein Editor!</p>',
  extensions: [
    StarterKit
  ]
})
</script>

<template>
  <div>
    <editor-content :editor="editor" />
  </div>
</template>

10.6 Zusammenfassung

In diesem Kapitel haben Sie gelernt:

  • ✅ Styling-Lösungen (SCSS, CSS-Module, Tailwind CSS)
  • ✅ API-Anfragen mit Axios zu integrieren
  • ✅ Berechtigungsverwaltung (Route-Guards, Rollen)
  • ✅ Fehlerbehandlung & Logging
  • ✅ Drittanbieter-Plugins (Rich Text Editor)

Nächste Schritte: Im nächsten Kapitel starten wir mit Praxisprojekten – wir bauen einen persönlichen Blog und eine Todo-App!


📚 Weiterführende Ressourcen


Nächstes Kapitel: Kapitel 11: Praxisprojekt - Persönlicher Blog →

Frei für alle Anfänger