⊗jsrxPmATDS 53 of 57 menu

POST сўровни Redux да thunk орқали юборилганда ишлов бериш

Биз сиз билан маҳсулотлар ва сотувчилар ҳақида маълумотларни сервердан олдик ва уларни иловага чиқардик. Лекин thunk ёрдамида фақат маълумот олишгина эмас, балки маълумот юбориш ҳам мумкин. Буни қандай қилишни биламиз.

Янги маҳсулотни қўшгандан сўнг, у бизнинг store-да, яъни иловамизнинг ичида қолади. Келинг, янги маҳсулот серверда сақлансини таъминлаймиз.

Келинг, сервердан бошлаймиз. Бу ерда бизга GET эмас, балки POST-сўровни ишлов бериш керак бўлади, чунки серверга енди маҳсулот маълумотлари келади, ва биз уларни ўша ерда сақлаймиз.

Маҳсулотлар билан илованимизни ochамиз, ундаги файл server.js ни ochамиз. Унинг ичидаги massivni handlers топамиз ва унга яна бита POST-сўров учун ишловчи қўшамиз. Бу ерда биз сўров bodyсини ҳам қабул қиламиз, шунинг учун callback да биз request ни ўтказамиз:

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

Энди jingalak qavslar ichida бизнинг callback имизнинг кодини ёзамиз. Бошлаш учун сўров маълумотларини оламиз ва хato юз берганда сервердан жавоб қайтарамиз, биз маълумотларни сақлай олмадик ва статус 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', }, }) } })

Agar ma'lumotlar bilan hammasi joyida bo'lsa, unda biz bazada ma'lumotlarдан сотувчини id бўйича топамиз, керак бизга сўровда келган ва ўша сотувчини data га киритамиз (сотувчи маълумотлари ҳам бизнинг серверда сақланади ;) ):

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

Keyin ma'lumotlar bazasida бу маҳсулот учун реакциялар объектини яратамиз. Ва энди, маҳсулот учун зарур барча майдонларга эга бўлиб, базада ўзимизнинг маҳсулотимизни яратамиз:

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

Кечиктириш қўйамиз ва коднинг oxirgi сатрида бизнинг callback имиз учун маҳсулот билан жавоб қайтарамиз:

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

Бу билан биз сервер билан тугатдик ва унга яна қайтмаймиз.

Kстати, яна бир фойдали нарса. Satrdan keyin export const worker = setupWorker(...handlers) сиз куйидаги кодни қўша оласиз:

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

Ва энди сиз ҳар бир ишловчининг ишлаш натижасини браузер консолида кўра оласиз.

Албатта бизнинг серверимиз ҳақиқий эмас ва агар биз браузерда саҳифани мажбуран янгиласак, бизнинг барча янги маҳсулот объектлари йўқолади.

Сизнинг талабалар билан иловангизни ochинг. Ундаги файл server.js ни ochинг. Massivга handlers POST-сўровни ишлов беришни қўшинг. Ушбу сўров bodyсида сиз янги қўшилган талабанинг маълумотларини қабул қиласиз.

Сизнинг http.post учун callback bodyсида маълумотларни чиқаринг ва хato юз берганда мос жавобни юборинг.

Agar hammasi joyida bo'lsa, unda ma'lumotlar bazasidan ўқитувчини олинган id бўйича топинг ва уни маълумотларга киритинг. Шунингдек, маълумотларга, база маълумотлари асосида яратилган объектни votes киритинг.

Тўпланган маълумотлар асосида объект яратинг student янги талаба билан ва уни сервер жавобида юборинг.

Ўзбек
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeOʻzbekTiếng Việt
Биз веб-сайт ишлаши, таҳлил қилиш ва персоналлаштириш учун кукидан фойдаланамиз. Маълумотларни қайта ишлаш Махфийлик сиёсатига мувофиқ амалга оширилади.
ҳаммасини қабул қилиш мослаштириш рад этиш