$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.
// 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')
Você pode usar $fetch
em qualquer método que seja executado apenas no lado do cliente.
<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:
// 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
).
※Esta página é uma tradução não oficial da documentação oficial do Nuxt.js.
A página correspondente na documentação oficial está aqui:
https://nuxt.com/docs/3.x/api/utils/dollarfetch