javascript - Ako použiť fetch() z verejného priečinka v NextJS?


Mám nasledujúci scenár použitia. Mám webového pracovníka, v rámci ktorého potrebujem načítať obrázok, ktorý sa nachádza v priečinku public NextJS, aby som ho mohol konvertovať na blob.

Práve teraz vykonanie fetch('public/images/myImage.png'); alebo fetch('/images/myImage.png'); vedie k chybe:

Chyba: TypeError: Nepodarilo sa vykonať 'fetch' na 'WorkerGlobalScope': Nepodarilo sa analyzovať URL z /images/ui/background_fire.jpg

Takže predpokladám, že sa to nevyriešuje správne, ako by sa to vyriešilo napríklad v src obrázka?

Odpoveď č. 1

@NasiruddinSaiyed odpoveď je trochu zastaraná, tak tu je odpoveď z roku 2021:

Dokumentácia polyfiltrov na strane servera NextJS

Polyfily na strane servera

Okrem použitia fetch() na klientskej strane, Next.js zabezpečuje polyfily pre fetch() aj v prostredí Node.js. Môžete používať fetch() vo vašom serverovom kóde (napríklad v getStaticProps) bez použitia polyfilov ako isomorphic-unfetch alebo node-fetch.

Takže by to malo fungovať hneď po vybalení

Odpoveď č. 2

Podľa oficiálnych dokumentov je potrebné použiť isomorphic-unfetch.

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

Nainštalujte to

$npm install --save isomorphic-unfetch

alebo

$yarn add isomorphic-unfetch

Teraz ho môžete použiť od getInitialProps kamkoľvek vo vašej komponente.

Príklad ::

`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)
  };
};

Šťastné kódovanie!!