Her er en oppdelt gjennomgang av app.js-koden i JavaScript som håndterer innleggene i Twitter-klonen. Vi skal ta den steg for steg, med en forklaring på hver del, og også gå gjennom hvorfor og hvordan async/await brukes.
app.js
async/await
Denne filen (plassert i public/javascripts/app.js) håndterer klientsiden av applikasjonen, altså hvordan vi:
public/javascripts/app.js
Her er hele koden i tre deler for en lettere gjennomgang:
Første delen er funksjonen fetchPosts(). Den henter innleggene fra serveren og viser dem på siden.
fetchPosts()
// public/javascripts/app.js // Hente og vise innleggene async function fetchPosts() { const response = await fetch('/posts'); const posts = await response.json(); const postsContainer = document.getElementById('postsContainer'); postsContainer.innerHTML = ''; posts.forEach(post => { const postElement = document.createElement('div'); postElement.innerHTML = ` <h3>${post.username}</h3> <p>${post.content}</p> <small>${post.timestamp}</small> <hr> `; postsContainer.appendChild(postElement); }); }
Forklaring linje for linje:
async function fetchPosts()
async
await
const response = await fetch('/posts');
fetch()
const posts = await response.json();
const postsContainer = document.getElementById('postsContainer');
postsContainer.innerHTML = '';
posts.forEach(post => { ... })
postElement.innerHTML = ...
div
postsContainer
Den andre delen er skjemaet som lar brukeren sende inn et nytt innlegg, og hvordan vi håndterer innsendingen med JavaScript.
// Legge til nytt innlegg document.getElementById('postForm').addEventListener('submit', async (e) => { e.preventDefault(); const username = document.getElementById('username').value; const content = document.getElementById('content').value; const response = await fetch('/posts', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ username, content }), }); if (response.ok) { document.getElementById('username').value = ''; document.getElementById('content').value = ''; fetchPosts(); // Oppdater innleggene etter publisering } });
document.getElementById('postForm').addEventListener('submit', async (e) => { ... });
e.preventDefault();
const username = document.getElementById('username').value;
const content = document.getElementById('content').value;
const response = await fetch('/posts', { ... });
POST
method: 'POST'
headers: { 'Content-Type': 'application/json' }
body: JSON.stringify({ username, content })
if (response.ok) { ... }
200 OK
fetchPosts();
Til slutt kaller vi fetchPosts() når siden lastes, slik at vi alltid ser de nyeste innleggene:
// Kaller funksjonen for å vise innlegg når siden lastes fetchPosts();
Dette er enkelt, men viktig! Når nettsiden lastes, henter denne linjen alle innleggene fra serveren og viser dem.
I denne koden bruker vi async/await for å håndtere asynkrone operasjoner. fetch()-forespørsler til serveren er asynkrone fordi det tar litt tid å sende og motta data fra serveren. Uten async/await ville vi måtte bruke .then() for å håndtere disse operasjonene, som kan gjøre koden mer komplisert å lese og forstå.
.then()
Hvordan fungerer async/await:
Vi har nå sett hvordan vi kan dele opp koden i håndterbare deler:
Dette gir oss en Twitter-lignende funksjonalitet på en enkel måte, samtidig som vi lærer viktige konsepter som asynkron programmering med async/await.
### **Oppgave: Bygg en Twitterklone med Express.js** I dag skal dere lage en enkel app som funge...
© 2024 • Contents under CC-BY-NC • Maintained by Karl Arne Dalsaune