javascript - Como usar fetch() a partir da pasta pública em NextJS?


Tenho o seguinte cenário de caso de uso. Tenho um web worker dentro do qual preciso buscar uma imagem que está localizada na pasta public do NextJS para a converter em blob.

Neste momento, executar fetch('public/images/myImage.png'); ou fetch('/images/myImage.png'); leva a um erro:

Erro: TypeError: Falha ao executar 'fetch' no 'WorkerGlobalScope': Falha ao analisar a URL de /images/ui/background_fire.jpg

Então suponho que não está a ser resolvido corretamente como seria, por exemplo, no src de uma imagem?

Resposta #1

@NasiruddinSaiyed a resposta está um pouco desatualizada, então aqui está a resposta de 2021:

Documentação de polyfills do lado do servidor do NextJS

Polyfills do Lado do Servidor

Além do fetch() no lado do cliente, o Next.js fornece polyfills para fetch() no ambiente Node.js. Pode usar fetch() no seu código de servidor (como em getStaticProps) sem precisar de polyfills como isomorphic-unfetch ou node-fetch.

Portanto, deve funcionar logo à partida

Resposta #2

De acordo com os documentos oficiais, precisa de usar o isomorphic-unfetch.

It's a simple implementation of the browser fetch API, but works both in client and server environments.

Instala-o

$npm install --save isomorphic-unfetch

ou

$yarn add isomorphic-unfetch

Agora pode usá-lo desde getInitialProps até qualquer lugar no seu componente.

Exemplo ::

`import fetch from 'isomorphic-unfetch';`

// ... Index component code

Index.getInitialProps = async function() { 

  const res = await fetch('https://api.tvmaze.com/search/shows?q=batman');
  const data = await res.json();
    
  console.log(`Show data fetched. Count: ${data.length}`);
    
  return {
    shows: data.map(entry => entry.show)
  };
};

Feliz programação!!