$fetch
Nuxt utiliza ofetch para exponer globalmente el helper $fetch para realizar solicitudes HTTP.
Nuxt utiliza ofetch para exponer globalmente el helper $fetch
para realizar solicitudes HTTP dentro de tu aplicación Vue o rutas API.
Durante la renderización del lado del servidor, llamar a $fetch
para obtener tus rutas API internas llamará directamente a la función relevante (emulando la solicitud), ahorrando una llamada API adicional.
Usar $fetch
en componentes sin envolverlo con useAsyncData
provoca que los datos se obtengan dos veces: inicialmente en el servidor, y luego nuevamente en el lado del cliente durante la hidratación, porque $fetch
no transfiere el estado del servidor al cliente. Por lo tanto, la obtención se ejecutará en ambos lados porque el cliente tiene que obtener los datos nuevamente.
Uso
Recomendamos usar useFetch
o useAsyncData
+ $fetch
para evitar la obtención doble de datos al obtener los datos del componente.
// Durante SSR los datos se obtienen dos veces, una en el servidor y otra en el cliente.
const dataTwice = await $fetch('/api/item')
// Durante SSR los datos se obtienen solo en el lado del servidor y se transfieren al cliente.
const { data } = await useAsyncData('item', () => $fetch('/api/item'))
// También puedes usar useFetch como atajo de useAsyncData + $fetch
const { data } = await useFetch('/api/item')
Puedes usar $fetch
en cualquier método que se ejecute solo en el lado del cliente.
<script setup lang="ts">
async function contactForm() {
await $fetch('/api/contact', {
method: 'POST',
body: { hello: 'world '}
})
}
</script>
<template>
<button @click="contactForm">Contactar</button>
</template>
$fetch
es la forma preferida de realizar llamadas HTTP en Nuxt en lugar de @nuxt/http y @nuxtjs/axios que están hechos para Nuxt 2.
Si usas $fetch
para llamar a una URL HTTPS (externa) con un certificado autofirmado en desarrollo, necesitarás establecer NODE_TLS_REJECT_UNAUTHORIZED=0
en tu entorno.
Pasando Headers y Cookies
Cuando llamamos a $fetch
en el navegador, headers de usuario como cookie
se enviarán directamente a la API.
Sin embargo, durante la Renderización del Lado del Servidor, debido a riesgos de seguridad como Server-Side Request Forgery (SSRF) o Uso indebido de Autenticación, $fetch
no incluirá las cookies del navegador del usuario, ni pasará cookies de la respuesta de fetch.
// Esto NO reenviará headers o cookies durante SSR
const { data } = await useAsyncData(() => $fetch('/api/cookies'))
Si necesitas reenviar headers y cookies en el servidor, debes pasarlos manualmente:
// Esto reenviará los headers y cookies del usuario a `/api/cookies`
const requestFetch = useRequestFetch()
const { data } = await useAsyncData(() => requestFetch('/api/cookies'))
Sin embargo, al llamar a useFetch
con una URL relativa en el servidor, Nuxt usará useRequestFetch
para proxy headers y cookies (con la excepción de headers que no deben ser reenviados, como host
).
※Esta página es una traducción no oficial de la documentación oficial de Nuxt.js.
La página correspondiente en la documentación oficial está aquí:
https://nuxt.com/docs/3.x/api/utils/dollarfetch