nuxt logo

Tradução da Documentação (Não Oficial)

$fetch

O Nuxt usa ofetch para expor globalmente o helper $fetch para fazer requisições HTTP.

O Nuxt usa ofetch para expor globalmente o helper $fetch para fazer requisições HTTP dentro do seu aplicativo Vue ou rotas de API.

Durante a renderização do lado do servidor, chamar $fetch para buscar suas rotas de API internas chamará diretamente a função relevante (emulando a requisição), economizando uma chamada de API adicional.

Usar $fetch em componentes sem envolvê-lo com useAsyncData faz com que os dados sejam buscados duas vezes: inicialmente no servidor, e novamente no lado do cliente durante a hidratação, porque $fetch não transfere o estado do servidor para o cliente. Assim, a busca será executada em ambos os lados porque o cliente precisa obter os dados novamente.

Uso

Recomendamos usar useFetch ou useAsyncData + $fetch para evitar a busca dupla de dados ao buscar os dados do componente.

app.vue
// Durante o SSR, os dados são buscados duas vezes, uma no servidor e outra no cliente.
const dataTwice = await $fetch('/api/item')

// Durante o SSR, os dados são buscados apenas no lado do servidor e transferidos para o cliente.
const { data } = await useAsyncData('item', () => $fetch('/api/item'))

// Você também pode usar useFetch como atalho de useAsyncData + $fetch
const { data } = await useFetch('/api/item')
Veja também getting-started > data-fetching

Você pode usar $fetch em qualquer método que seja executado apenas no lado do cliente.

pages/contact.vue
<script setup lang="ts">
async function contactForm() {
  await $fetch('/api/contact', {
    method: 'POST',
    body: { hello: 'world '}
  })
}
</script>

<template>
  <button @click="contactForm">Contact</button>
</template>

$fetch é a maneira preferida de fazer chamadas HTTP no Nuxt em vez de @nuxt/http e @nuxtjs/axios que são feitos para o Nuxt 2.

Se você usar $fetch para chamar uma URL HTTPS (externa) com um certificado autoassinado em desenvolvimento, você precisará definir NODE_TLS_REJECT_UNAUTHORIZED=0 no seu ambiente.

Passando Cabeçalhos e Cookies

Quando chamamos $fetch no navegador, cabeçalhos do usuário como cookie serão enviados diretamente para a API.

No entanto, durante a Renderização do Lado do Servidor, devido a riscos de segurança como Server-Side Request Forgery (SSRF) ou Uso Indevido de Autenticação, o $fetch não incluirá os cookies do navegador do usuário, nem passará cookies da resposta da busca.

// Isso NÃO encaminhará cabeçalhos ou cookies durante o SSR
const { data } = await useAsyncData(() => $fetch('/api/cookies'))

Se você precisar encaminhar cabeçalhos e cookies no servidor, deve passá-los manualmente:

pages/index.vue
// Isso encaminhará os cabeçalhos e cookies do usuário para `/api/cookies`
const requestFetch = useRequestFetch()
const { data } = await useAsyncData(() => requestFetch('/api/cookies'))

No entanto, ao chamar useFetch com uma URL relativa no servidor, o Nuxt usará useRequestFetch para proxy de cabeçalhos e cookies (com exceção de cabeçalhos que não devem ser encaminhados, como host).