Skip to content

Utiliser les services dans Vue

Le module injecte un client Feathers dans l’application Nuxt. Vous pouvez appeler un service depuis une page, un composant, un composable ou un store Pinia.

Lire une liste

vue
<script setup lang="ts">
interface Message {
  id: string
  text: string
  createdAt: string
}

const { $api } = useNuxtApp()
const loading = ref(false)
const messages = ref<Message[]>([])

async function loadMessages(): Promise<void> {
  loading.value = true
  try {
    const result = await $api.service('messages').find({
      query: {
        $limit: 20,
        $sort: { createdAt: -1 },
      },
    })
    messages.value = Array.isArray(result) ? result : result.data
  }
  finally {
    loading.value = false
  }
}

await loadMessages()
</script>

<template>
  <p v-if="loading">Chargement…</p>
  <ul v-else>
    <li v-for="message in messages" :key="message.id">
      {{ message.text }}
    </li>
  </ul>
</template>

Créer une donnée

ts
await $api.service('messages').create({
  text: 'Bonjour depuis Nuxt',
})

Le serveur valide la donnée avec le schéma du service. Ne faites pas confiance à la seule validation du formulaire navigateur.

Écouter les événements

ts
const service = $api.service('messages')

function onCreated(message: Message): void {
  messages.value.unshift(message)
}

onMounted(() => service.on('created', onCreated))
onBeforeUnmount(() => service.off('created', onCreated))

Utiliser l’authentification

ts
const auth = useAuth()

await auth.login({
  strategy: 'local',
  email: 'developer@example.test',
  password: 'mot-de-passe-de-test',
})

Pour protéger une page, utilisez le middleware de session généré ou contrôlez auth.isAuthenticated avant d’afficher une fonction sensible.

Bonnes pratiques

  • Typpez les données retournées par chaque service.
  • Limitez les requêtes avec $limit, $select et des filtres validés.
  • Nettoyez les listeners Feathers quand le composant est démonté.
  • Centralisez les appels répétés dans un composable ou un store Pinia.
  • Affichez un message utilisateur simple et journalisez séparément le diagnostic technique.

Documentation utilisateur de nuxt-feathers-zod