⊗jsrxPmSDCl 44 of 57 menu

Kliens az alkalmazáshoz a Reduxban

Az előző órákon gyakorlatilag befejeztük alkalmazásunk szerveroldali részének munkálatait, egy kicsit kiegészítjük szükség szerint a következő leckékben. Most létre kell hoznunk az alkalmazás kliensét, amely HTTP-kéréseket fog küldeni a szerverre.

Nyissuk meg a termékekkel kapcsolatos alkalmazásunkat és a api mappában hozzunk létre egy client.js fájlt. Kezdetben megírjuk magát a client függvényt, amely mind GET, mind pedig POST kérések esetén működni fog. Paraméterként megkapja az útvonalat, a típust és a kérés törzsét (POST esetén), ha van ilyen:

export async function client(url, method, body = {}) {}

Ezután létre kell hoznunk egy options objektumot, amelyben különböző információkat fogunk átadni a kéréshez. Ez lesz a kérés típusa és a fejlécek:

export async function client(url, method, body = {}) { const options = { method: method, headers: { 'Content-Type': 'application/json', }, } }

A body tulajdonságunk opcionális, csak akkor kell átadnunk, ha POST-kérésről van szó. Ehhez a client függvényen belül, az options objektum létrehozása után adjuk hozzá az options-hoz a kérés törzsét JSON formátumban, ha a POST metódus van kiválasztva:

if (method === 'POST') { options.body = JSON.stringify(body) }

Ezután a client függvényben, lentebb szervezzünk egy try blokkot, amelynek első sorában a fetch segítségével megkapjuk a választ a szervertől. Sikertelenség esetén hagyományosan egy promiset adunk vissza hibával:

let data try { const response = await window.fetch(url, options) } catch (err) { return Promise.reject(err.message ? err.message : data) }

Most írjuk meg a kódot a try blokkban. A response megérkezése után feldolgoznunk kell. Kinyerjük belőle az adatokat JSON formátumban, és ha a válasz státusza jelezni számunkra, hogy minden rendben van, akkor visszaadjuk az adatokat és információkat tartalmazó objektumot: státusz, fejlécek és cím. Ha viszont a státusz nem 'ok', akkor dobjunk kivételt a státusz szövegével:

try { const response = await window.fetch(url, options) data = await response.json() if (response.ok) { return { status: response.status, headers: response.headers, url: response.url, data, } } throw new Error(response.statusText) }

A client függvény kódja kész, már csak az van hátra, hogy megírjuk, hogyan fognak működni a GET és POST metódusaink a hívás során. Írjuk meg a kódot rájuk a client függvény után. A client.get metódus paraméterként az útvonalat fogja venni, és meghívja a client függvényt, átadva neki ezt az útvonalat és a GET kérés típusát:

client.get = (url) => client(url, 'GET')

A client.post-nak pedig át kell adnia a client számára az útvonalat, a POST kérés típusát és a kérés törzsét:

client.post = (url, body) => client(url, 'POST', body)

Ezzel végeztünk, a kis kliensünk kész a szerverrel való munkára.

Nyissa meg a diákokkal kapcsolatos alkalmazását, hozzon létre benne a api mappában egy client.js fájlt. A lecke anyagainak megismerése után írja (másolja) be a client függvény és két metódusának, a client.get és a client.post kódját.

azswdehuuzc