Redux-daky thunk ulanyp iberilen POST haýyşyny işlemek
Biz siz bilen önümçilik we satyjylaryň maglumatlaryny serwerden aldyk we olary programmamyza çykardyk. Ýöne thunk diňe almak üçin däl, eýsem maglumat ibermek üçin hem ulanylyp bilner. Bunyň nähili edilýändigini öwreneliň.
Täze önüm goşanymyzdan soň, ol bizim store-da, ýagny programmamyzyň içinde galýar. Geliň, täze önümiň serwerde saklanýandygyny edeliň.
Geliň serwerden başlalyň. Bu ýerde biz artýk GET däl, POST haýyşyny işlemeli bolarys, sebäbi serwere indi önümiň maglumatlary gelýär we biz olary şol ýerde saklarys.
Önümçilikli programmanymyzy, we onuň içindäki
server.js faýlyny açalyň. Onda handlers
massiwini tapalyň we oňa POST haýyşy üçin ýene bir
işleýji goşalyň. Bu ýerde biz
haýyşyň bedenini hem kabul etmeli bolarys, şonuň üçin
callback içine request geçirmeli:
http.post('/fakeServer/products', async ({ request }) => {})
Indi ýaýly möýşümlerde callback-iň kodyny ýazalyň.
Ilki bilen haýyş maglumatlaryny çykaryň we
ýalňyşlyk ýüze çykanda serwerden jogaby
biz maglumatlary saklap bilmedik we
500 statusy bilen iberiň:
http.post('/fakeServer/products', async ({ request }) => {
const data = await request.json()
if (data.content === 'error') {
await delay(ARTIFICIAL_DELAY_MS)
return new HttpResponse('serwer saklamak ýalňyşlygy', {
status: 500,
headers: {
'Content-Type': 'application/json',
},
})
}
})
Eger maglumatlar bilen hemme zat gowy bolsa, onda maglumat bazasynda
bize haýyşda gelen id boýunça satyjyny taparys we bu satyjyny
data-a ýazarys (satyjynyň maglumatlary hem şol serwerde saklanýar ;) ):
const seller = db.seller.findFirst({
where: { id: { equals: data.seller } },
})
data.seller = seller
Soňra maglumat bazasynda bu önüm üçin reaksiýalar bilen obýekti dörediň. Indi, önüm üçin gerekli bolan ähli meýdanlara eýe bolanymyzda, bazada özümi önümi dörediň:
data.reactions = db.reaction.create()
const product = db.product.create(data)
Gijä galdyrmany goýuň we callback-iň kody üçin iň soňky setirde önüm bilen jogaby gaýtaryň:
await delay(ARTIFICIAL_DELAY_MS)
return HttpResponse.json(serializeProduct(product))
Bu bilen biz serwer bilen doly gutardyk we ýene-de oňa gaýdyp gelmeris.
Haýsam, ýene bir peýdaly zat. Şu setirden soň
export const worker = setupWorker(...handlers)
aşakdaky kody goşup bilersiňiz:
worker.listHandlers().forEach((handler) => {
console.log(handler.info.header)
})
Indi siz brauzeriň konsolunda her bir işleýjiniň işleýş netijesini görip bilersiňiz.
Elbetde, bizim serwerimiz hakyky däl we eger biz brauzerde sahypany mejburýetlendirilen täzeden ýüklänimizde, onda bizim täze önüm obýektlerimiz ýogolar.
Studentler bilen programmanyzy açyň.
Onda server.js faýlyny açyň. handlers
massiwinä POST haýyşyny işlemegi goşuň.
Bu haýyşyň bedeninde siz täze goşulan studentiň
maglumatlaryny kabul edersiňiz.
http.post üçin callback-iň bedeninde
maglumatlary çykaryň we ýalňyşlyk ýüze çykanda degişli
jogaby iberiň.
Eger hemme zat gowy bolsa, onda maglumat bazasynda
alnan id boýunça mugallymy tapyň we
ony maglumatlara ýazyň. Şeýle hem maglumatlara,
maglumat bazasy esas düzülen votes
obýektini hem ýazyň.
Ýygnan maglumatlar boýunça täze student bilen
student obýektini dörediň we
ony serweriň jogabyna iberiň.