⊗jsrxPmATDS 53 of 57 menu

Obrada POST zahteva, poslatog pomoću thunk u Redux-u

Mi smo sa vama dobili podatke o proizvodima i prodavcima sa servera i prikazali ih u aplikaciji. Ali pomoću thunk-a možemo ne samo da primamo, već i da šaljemo podatke. Hajde da saznamo kako se to radi.

Nakon što dodamo novi proizvod, on ostaje u našem store-u, odnosno unutar naše aplikacije. Hajde da učinimo tako, da se novi proizvod sačuva na serveru.

Počnimo sa serverom. Ovde ćemo već morati da obradimo ne GET, već POST zahtev, jer će na server sada stizati podaci o proizvodu, koje ćemo i tamo čuvati.

Otvorimo našu aplikaciju sa proizvodima, a u njoj fajl server.js. Pronađimo u njemu niz handlers i dodajmo u njega još jedan obrađivač za POST zahtev. Ovde ćemo prihvatati još i telo zahteva, zato u callback moramo da prosledimo request:

http.post('/fakeServer/products', async ({ request }) => {})

Sada u vitičastim zagradama napišimo kod našeg callback-a. Za početak izvučimo podatke zahteva i u slučaju greške pošaljemo sa servera odgovor da nismo uspeli da sačuvamo podatke i status 500:

http.post('/fakeServer/products', async ({ request }) => { const data = await request.json() if (data.content === 'error') { await delay(ARTIFICIAL_DELAY_MS) return new HttpResponse('server save error', { status: 500, headers: { 'Content-Type': 'application/json', }, }) } })

Ako su podaci u redu, onda ćemo u bazi podataka naći prodavca po id-u, koji nam je stigao u zahtevu i upisati tog prodavca u data (podaci o prodavcu se ipak čuvaju i na serveru ;) ):

const seller = db.seller.findFirst({ where: { id: { equals: data.seller } }, }) data.seller = seller

Zatim u bazi podataka kreirajmo za ovaj proizvod objekat sa reakcijama. I sada, imajući sva neophodna polja za proizvod, kreirajmo u bazi i sam proizvod:

data.reactions = db.reaction.create() const product = db.product.create(data)

Postavimo kašnjenje i u poslednjoj liniji koda za naš callback vratimo odgovor sa proizvodom:

await delay(ARTIFICIAL_DELAY_MS) return HttpResponse.json(serializeProduct(product))

Ovim smo u potpunosti završili sa serverom i više se nećemo vraćati na njega.

Inače, još jedna korisna stvar. Nakon linije export const worker = setupWorker(...handlers) možete dodati sledeći kod:

worker.listHandlers().forEach((handler) => { console.log(handler.info.header) })

I sada ćete moći da vidite rezultat aktiviranja svakog obrađivača u konzoli brauzera.

Naravno, naš server nije pravi i ako prisilno osvežavamo stranicu u brauzeru, svi naši novi objekti sa proizvodima će nestati.

Otvorite vašu aplikaciju sa studentima. Otvorite u njoj fajl server.js. Dodajte u niz handlers obradu POST zahteva. U telu ovog zahteva ćete primati podatke novog dodatog studenta.

U telu callback-a za vaš http.post raspakujte podatke i u slučaju greške pošaljite odgovarajući odgovor.

Ako je sve u redu, onda pronađite u bazi podataka nastavnika po dobijenom id-u i upišite ga u podatke. Upišite takođe u podatke, kreiran na osnovu baze podataka objekat votes.

Po prikupljenim podacima kreirajte objekat student sa novim studentom i pošaljite ga u odgovoru servera.

Srpski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Koristimo kolačiće za rad sajta, analitiku i personalizaciju. Obrada podataka se vrši u skladu sa Politikom privatnosti.
prihvati sve podesi odbij