⊗jsrxPmATDS 53 of 57 menu

Prelucrarea unei cereri POST trimise folosind thunk în Redux

Am obținut datele despre produse și vânzători de la server și le-am afișat în aplicație. Dar cu thunk poți nu doar să primești, ci și să trimiți date. Să aflăm cum să facem asta.

După ce adăugăm un nou produs, acesta rămâne în store-ul nostru, adică în interiorul aplicației noastre. Să facem astfel încât noul produs să fie salvat pe server.

Să începem cu serverul. Aici va trebui deja să prelucrăm nu o cerere GET, ci una POST, deoarece către server vor sosi acum datele produsului, pe care le vom salva acolo.

Să deschidem aplicația noastră cu produse, iar în ea fișierul server.js. Să găsim în el array-ul handlers și să adăugăm în el încă un handler pentru cererea POST. Aici vom accepta și body-ul cererii, de aceea în callback trebuie să îi transmitem request:

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

Acum în acolade vom scrie codul callback-ului nostru. Pentru început, să extragem datele cererii și în caz de eroare să trimitem de pe server un răspuns că nu am putut salva datele și statusul 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', }, }) } })

Dacă datele sunt în regulă, atunci în baza de date vom găsi vânzătorul după id-ul care ne-a venit în cerere și vom scrie acest vânzător în data (datele vânzătorului la urma urmei sunt și ele stocate pe server ;) ):

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

În continuare, în baza de date vom crea pentru acest produs un obiect cu reacții. Și acum, având toate câmpurile necesare pentru produs, să creăm în baza de date și produsul în sine:

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

Să setăm o întârziere și în ultima linie de cod pentru callback-ul nostru să returnăm un răspuns cu produsul:

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

Cu aceasta am terminat complet cu serverul și nu ne vom mai întoarce la el.

Apropo, încă un lucru util. După linia export const worker = setupWorker(...handlers) puteți adăuga următorul cod:

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

Și acum veți putea vedea rezultatul activării fiecărui handler în consola browser-ului.

Desigur, serverul nostru nu este real și dacă vom reîmprospăta forțat pagina în browser, toate obiectele noastre noi cu produse vor dispărea.

Deschideți aplicația voastră cu studenții. Deschideți în ea fișierul server.js. Adăugați în array-ul handlers prelucrarea unei cereri POST. În body-ul acestei cereri veți accepta datele noului student adăugat.

În body-ul callback-ului pentru http.post extrageți datele și în caz de eroare trimiteți un răspuns corespunzător.

Dacă totul este în regulă, atunci găsiți în baza de date profesorul după id-ul primit și scrieți-l în date. Scrieți de asemenea în date, un obiect votes creat pe baza bazei de date.

Pe baza datelor adunate creați un obiect student cu noul student și trimițeți-l în răspunsul serverului.

Română
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Folosim cookie pentru funcționarea site-ului, analiză și personalizare. Prelucrarea datelor are loc în conformitate cu Politica de confidențialitate.
acceptă toate configurează respinge