⊗jsrxPmATDS 53 of 57 menu

Апрацоўка POST запыту, адпраўленага з дапамогай thunk у Redux

Мы з вамі атрымалі дадзеныя прадуктаў і прадаўцоў з сервера і вывялі іх у прыкладанне. Але з дапамогай thunk можна не толькі атрымліваць, але і адпраўляць дадзеныя. Даведаемся, як гэта рабіць.

Пасля таго, як мы дадаем новы прадукт, ён застаецца ў нас у store, гэта значыць унутры нашага прыкладання. Давайце зробім так, каб новы прадукт захоўваўся на серверы.

Давайце пачнем з сервера. Тут нам ужо прыдзецца апрацаваць не GET, а POST-запыт, паколькі на сервер цяпер будуць паступаць дадзеныя прадукта, якія мы і будзем там захоўваць.

Адчынім наша прыкладанне з прадуктамі, а ў ім файл server.js. Знайдзем у ім масіў handlers і дадамо ў яшчэ адзін апрацоўшчык для POST-запыту. Тут мы будзем прымаць яшчэ і цела запыту, таму ў callback мы павінны перадаць request:

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

Цяпер у фігурных дужках напішам код нашага калбэка. Для пачатку здабудзем дадзеныя запыту і ў выпадку памылкі адправім з сервера адказ, што мы не змаглі захаваць дадзеныя і статус 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', }, }) } })

Калі з дадзенымі ўсё ў парадку, то мы ў базе дадзеных знойдзем прадаўца па id, які нам прыйшоў у запыце і ўпішам гэтага прадаўца ў data (дадзеныя прадаўца ж у нас таксама захоўваюцца на серверы ;) ):

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

Далей у базе дадзеных створым для гэтага прадукта аб'ект з рэакцыямі. І цяпер, маючы ўсе неабходныя палі для прадукта, створым у базе і сам прадукт:

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

Поставім затрымку і ў апошнім радку кода для нашага калбэка вернем адказ з прадуктам:

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

На гэтым мы цалкам скончылі з серверам і больш да яго не вернемся.

Дарэчы, яшчэ адна карысная рэч. Пасля радка export const worker = setupWorker(...handlers) вы можаце дадаць наступны код:

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

І цяпер вы зможаце бачыць вынік спрацоўвання кожнага апрацоўшчыка ў кансолі браўзера.

Вядома ж наш сервер несапраўдны і калі мы будзем прымусова абнаўляць старонку ў браўзеры, то ўсе нашы новыя аб'екты з прадуктамі знікнуць.

Адчынiце ваша прыкладанне з студэнтамі. Адчынiце ў ім файл server.js. Дадайце ў масіў handlers апрацоўку POST-запыту. У целе гэтага запыту вы будзеце прымаць дадзеныя новага дададзенага студэнта.

У целе callback для вашага http.post распакуйце дадзеныя і ў выпадку памылкі адпраўце адпаведны адказ.

Калі ж усё ак, то знайдзіце ў базе дадзеных выкладчыка па атрыманым 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çeЎзбекOʻzbekTiếng Việt
Мы выкарыстоўваем cookie для працы сайта, аналітыкі і персаналізацыі. Апрацоўка дадзеных адбываецца згодна Палітыкай канфідэнцыяльнасці.
прыняць усе наладзіць адхіліць