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 бо донишҷӯи нав эҷод кунед ва
онро дар посуди сервер фиристед.