// Experimento da Parte 7 (opcional): a mesma listagem de quatro maneiras. // Numa CÓPIA do projeto aula-13-dados-api, use uma delas em // app/livros/page.tsx no lugar de `listarLivros`, retire o `await connection()` // e observe o símbolo de /livros na saída de `rm -rf .next && npm run build`. import axios from "axios"; import type { Livro, Pagina } from "./livros"; const URL_LISTA = `${process.env.API_URL ?? "http://localhost:3000"}/livros?tamanho=100`; // ○ — sem opção, o fetch roda uma vez no build (aula 13, Parte 4). export async function fetchPadrao(): Promise { const resposta = await fetch(URL_LISTA); return ((await resposta.json()) as Pagina).dados; } // ƒ — a própria chamada declara que não pode ser reaproveitada. export async function fetchNoStore(): Promise { const resposta = await fetch(URL_LISTA, { cache: "no-store" }); return ((await resposta.json()) as Pagina).dados; } // ○ — o axios usa o módulo http do Node, que o Next não observa. Para mudar // o comportamento é preciso declarar na rota: `await connection()` ou // `export const revalidate = 60`. export async function axiosHttp(): Promise { return (await axios.get>(URL_LISTA)).data.dados; } // O build FALHA: com o adaptador fetch a chamada passa pelo fetch do Next, // mas o sinal interno que o Next lança para marcar a rota como dinâmica é // capturado pelo axios e volta como AxiosError. export async function axiosFetchNoStore(): Promise { const resposta = await axios.get>(URL_LISTA, { adapter: "fetch", fetchOptions: { cache: "no-store" }, }); return resposta.data.dados; }