⊗jsrxPmATDS 53 of 57 menu

POST-pyynnön käsittely, joka on lähetetty käyttäen thunkia Reduxissa

Olemme saaneet tuote- ja myyjätiedot palvelimelta ja näyttäneet ne sovelluksessamme. Mutta thunkia voidaan käyttää paitsi tietojen hakemiseen, myös tietojen lähettämiseen. Opitaan, kuinka se tehdään.

Sen jälkeen kun olemme lisänneet uuden tuotteen, se pysyy meidän store:ssamme, eli sisällä sovellustamme. Tehdään niin, että uusi tuote tallennetaan palvelimelle.

Aloitetaan palvelimesta. Täällä meidän on nyt käsiteltävä ei GET, vaan POST-pyyntö, koska palvelimelle tulee nyt tuotetietoja, joita tallennamme sinne.

Avataan tuotesovelluksemme, ja siinä tiedosto server.js. Etsitään siitä taulukko handlers ja lisätään siihen vielä yksi käsitteljä POST-pyynnölle. Täällä me otamme vastaan myös pyynnön bodyn, joten callbackiin meidän on välitettävä request:

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

Kirjoitetaan nyt aaltosulkeisiin koodi meidän takaisinkutsustamme. Puretaan aluksi pyynnön tiedot ja virhetilanteessa lähetetään palvelimelta vastaus, että emme pystyneet tallentamaan tietoja ja 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', }, }) } })

Jos tiedot ovat kunnossa, löydämme tietokannasta myyjän id:n perusteella, joka on tullut pyynnössä ja kirjoitamme tämän myyjän kohtaan data (myyjän tiedothan meillä myös säilytetään palvelimella ;) ):

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

Seuraavaksi luodaan tietokantaan tälle tuotteelle objekti reaktioille. Ja nyt, kun meillä on kaikki tarvittavat kentät tuotteelle, luodaan tietokantaan itse tuote:

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

Asetetaan viive ja viimeisellä koodirivillä meidän takaisinkutsustamme palautetaan vastaus tuotteella:

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

Tällä olemme täysin valmiita palvelimen kanssa emkäkä enää palaa siihen.

Muuten, vielä yksi hyödyllinen asia. Rivin export const worker = setupWorker(...handlers) jälkeen voit lisätä seuraavan koodin:

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

Ja nyt pystyt näkemään tuloksen jokaisen käsitteljän suorituksesta selaimen konsolissa.

Tietenkin palvelimemme ei ole aito ja jos pakotamme sivun päivittämisen selaimessa, kaikki uudet tuoteobjektimme katoavat.

Avaa opiskelijasovelluksesi. Avaa siinä tiedosto server.js. Lisää taulukkoon handlers POST-pyynnön käsittely. Tässä pyynnön bodyssä otat vastaan uuden lisätyn opiskelijan tiedot.

Oman http.post takaisinkutsusi bodyssä pura tiedot ja virhetilanteessa lähetä vastaava vastaus.

Jos kaikki on kunnossa, etsi tietokannasta opettajan saadun id:n perusteella ja kirjoita hänen tiedonsa dataan. Kirjoita myös dataan, tietokannan perusteella luotu objekti votes.

Kerättyjen tietojen perusteella luo objekti student uudella opiskelijalla ja lähetä se palvelimen vastauksessa.

Suomi
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Käytämme evästeitä verkkosivuston toiminnalle, analytiikalle ja personoinnille. Tietojen käsittely tapahtuu Tietosuojakäytännön mukaisesti.
hyväksy kaikki mukauta hylkää