javascript_lecture5_example_complete
  1. 09_fetch_response.js
// Import uit Node/Bun's fs module om bestanden te schrijven.
import {writeFile} from 'node:fs/promises'

async function testGitHub() {
  // We vragen de GitHub API voor informatie over de IT Graduaten organisatie.
  const response = await fetch('https://api.github.com/users/it-graduaten');

  // Verwerkt het resultaat als json
  const org = await response.json();
  console.log(org);
  console.log(`Number of public repos: ${org.public_repos}`);

  // Niet alles is JSON, we kunnen een request ook als text behandelen.
  // Merk op dat hier een andere URL gebruikt wordt dan hierboven.
  const response2 = await fetch(org.html_url);

  // Als text binnenhalen
  const tekst = await response2.text();
  await writeFile('index.html', tekst, {encoding: 'utf-8'})

  // Headers kunnen uitgelezen worden.
  // Via .get kan een specifieke header geselecteerd worden.
  console.log(response2.headers.get("Content-Type")); // text/html; charset=utf-8

  // Download de afbeelding van het IT Graduaten logo en sla deze op als avatar.png
  // De arrayBuffer methode maakt een buffer (array) van bytes die de binaire data voorstelt.
  const response3 = await fetch(org.avatar_url);
  const imageData = await response3.arrayBuffer()
  await writeFile('avatar.png', imageData)
}

// Deze top-level await is NIET beschikbaar in een browser, maar werkt wel in Bun en bepaalde andere runtimes.
// Als je dit toch wilt gebruiken in de browser moet je `type="module"` toevoegen aan het script tag.
await testGitHub();