js/utils.js + js/api.js — pagalbininkas ir tinklo sluoksnis
Du failai kodo stulpelyje kaip skirtukai: js/utils.js (mažas modify — vienas naujas pagalbininkas) ir js/api.js (naujas). api.js taisyklė: tik šis failas kalba su API. Visa kita programa kviečia fetchPictures(days) ir nežino apie fetch, URL ar raktus. Vienas sluoksnis — vieną kartą pakeisi API ir nieko kito liesti nereikės.
fetchPictures suskaičiuoja datų intervalą, sudaro URL su raktu ir kviečia bendrą request(). request() — vienintelė vieta, kur tikrinamas atsakymas.
Pirma — utils.js skirtukas: vienas datos pagalbininkas, kurio reikia api.js (API laukia YYYY-MM-DD). Visa kita faile lieka; diff parodo tik šį papildymą:
/** Date → "YYYY-MM-DD" (formatas, kurio laukia NASA API) */
export function formatDateParam(date) {
return date.toISOString().split('T')[0];
}
Dėmesio centre — request():
async function request(url) {
const response = await fetch(url);
if (!response.ok) { // ← BE ŠITO klaida praeitų tyliai
throw new Error(`The API returned ${response.status}`);
}
return response.json();
}
response.ok yra true, kai statusas 200–299. Jei serveris grąžina 404 ar 500, fetch neišmeta klaidos — await fetch(...) tiesiog grąžina atsakymą su ok === false. Jei to nepatikrinsi ir iškart darysi response.json(), bandysi klaidos puslapį (dažnai HTML) analizuoti kaip JSON ir gausi paslaptingą „Unexpected token <" klaidą.
Patarimas. Kodėl
data.reverse()gale? NASA grąžina nuotraukas nuo seniausios. Galerijoje norim naujausią viršuje, tad apverčiam. Smulkmena, bet tokie „duomenų sutvarkymai" priklauso API sluoksniui — likusi programa gauna jau paruoštą tvarką.