⊗jsrxPmATDS 53 of 57 menu

Redux'ta thunk ile gönderilen POST isteğinin işlenmesi

Ürün ve satıcı verilerini sunucudan aldık ve uygulamada görüntüledik. Ancak thunk kullanarak sadece veri almakla kalmayıp, veri de gönderebiliriz. Bunun nasıl yapılacağını öğrenelim.

Yeni bir ürün ekledikten sonra, bu ürün store'umuzda, yani uygulamamızın içinde kalıyor. Şimdi yeni ürünün sunucuda da kaydedilmesini sağlayalım.

Sunucudan başlayalım. Burada artık GET değil, POST isteğini işlememiz gerekecek, çünkü sunucuya artık kaydedeceğimiz ürün verileri gelecek.

Ürün uygulamamızı açalım ve içindeki server.js dosyasını bulalım. İçindeki handlers dizisini bulup POST isteği için bir işleyici daha ekleyelim. Burada istek gövdesini de alacağımız için callback içine request'i geçirmeliyiz:

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

Şimdi süslü parantezler içinde callback fonksiyonumuzun kodunu yazalım. Öncelikle istek verilerini çıkaralım ve bir hata olması durumunda sunucudan verileri kaydedemediğimizi belirten ve 500 durum kodlu bir yanıt gönderelim:

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', }, }) } })

Eğer verilerde sorun yoksa, veritabanında bize gelen id'ye göre satıcıyı bulacağız ve bu satıcıyı data'ya yazacağız (satıcı verileri de bizim sunucumuzda saklanıyor sonuçta ;) ):

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

Daha sonra veritabanında bu ürün için reaksiyon nesnesi oluşturacağız. Ve şimdi, ürün için gerekli tüm alanlara sahip olarak, veritabanında ürünün kendisini de oluşturalım:

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

Gecikmeyi ekleyelim ve callback fonksiyonumuzun son satırında ürünle birlikte bir yanıt döndürelim:

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

Böylece sunucu kısmını tamamen bitirdik ve bir daha dönmeyeceğiz.

Bu arada, bir başka yararlı şey. export const worker = setupWorker(...handlers) satırından sonra şu kodu ekleyebilirsiniz:

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

Ve artık her işleyicinin tetiklenme sonucunu tarayıcı konsolunda görebileceksiniz.

Tabii ki sunucumuz gerçek değil ve tarayıcıda sayfayı zorla yenilersek, tüm yeni ürün nesnelerimiz kaybolacak.

Öğrenci uygulamanızı açın. İçindeki server.js dosyasını açın. handlers dizisine POST isteği işlemi ekleyin. Bu isteğin gövdesinde yeni eklenen öğrencinin verilerini alacaksınız.

http.post callback'inizin gövdesinde verileri açın ve hata durumunda uygun bir yanıt gönderin.

Eğer her şey yolundaysa, veritabanında alınan id'ye göre öğretmeni bulun ve verilere yazın. Ayrıca veritabanı temel alınarak oluşturulmuş votes nesnesini de verilere yazın.

Toplanan verilerle yeni bir öğrenci içeren student nesnesi oluşturun ve sunucu yanıtında geri gönderin.

kanlmskkuzc