⊗jsrxPmATDS 53 of 57 menu

Обработка на POST заявка, изпратена с помощта на thunk в Redux

Ние получихме данните за продуктите и продавачите от сървъра и ги показахме в приложението. Но с thunk може не само да получаваме, но и да изпращаме данни. Нека разберем как да го направим.

След като добавим нов продукт, той остава в нашия store, тоест вътре в нашето приложение. Нека направим така, че новият продукт да се запазва на сървъра.

Нека започнем със сървъра. Тук вече ще трябва да обработим не GET, а POST заявка, тъй като на сървъра сега ще пристигат данни за продукта, които ще запазваме там.

Нека отворим нашето приложение с продукти, а в него файла server.js. Да намерим в него масива handlers и да добавим в него още един обработчик за POST заявка. Тук ние ще приемаме и тялото на заявката, затова в callback трябва да подадем request:

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

Сега във фигурните скоби ще напишем кода на нашия callback. Като начало ще извлечем данните от заявката и в случай на грешка ще изпратим от сървъра отговор, че не успяхме да запазим данните и статус 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)

Ще сложим забавяне и на последния ред код за нашия callback ще върнем отговор с продукта:

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

С това напълно приключихме със сървъра и повече няма да се връщаме към него.

Между другото, още едно полезно нещо. След реда export const worker = setupWorker(...handlers) можете да добавите следния код:

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

И сега ще можете да виждате резултата от задействането на всеки обработчик в конзолата на браузъра.

Разбира се, нашият сървър не е истински и ако принудително опресняваме страницата в браузъра, всички наши нови обекти с продукти ще изчезнат.

Отворете вашето приложение със студенти. Отворете в него файла 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
Ние използваме бисквитки за работата на сайта, анализ и персонализация. Обработката на данни се извършва в съответствие с Политика за поверителност.
приемам всички настройки отхвърляне