⊗jsrxPmATDS 53 of 57 menu

Verarbeitung einer POST-Anfrage, die mit Thunk in Redux gesendet wurde

Wir haben die Produkt- und Verkäuferdaten vom Server abgerufen und sie in der Anwendung angezeigt. Mit Thunk kann man aber nicht nur Daten abrufen, sondern auch senden. Lassen Sie uns herausfinden, wie das geht.

Nachdem wir ein neues Produkt hinzugefügt haben, bleibt es in unserem Store, also innerhalb unserer Anwendung. Lassen Sie uns dafür sorgen, dass das neue Produkt auf dem Server gespeichert wird.

Beginnen wir mit dem Server. Hier müssen wir keine GET-, sondern eine POST-Anfrage bearbeiten, da nun die Produktdaten an den Server gesendet werden, die wir dort speichern werden.

Öffnen wir unsere Produktanwendung und darin die Datei server.js. Suchen wir darin das Array handlers und fügen einen weiteren Handler für die POST-Anfrage hinzu. Hier empfangen wir auch den Request Body, daher müssen wir request an den Callback übergeben:

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

Nun schreiben wir den Code für unseren Callback in die geschweiften Klammern. Extrahieren wir zunächst die Anfragedaten und senden wir im Fehlerfall vom Server eine Antwort, dass wir die Daten nicht speichern konnten, und den Status 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', }, }) } })

Wenn die Daten in Ordnung sind, finden wir in der Datenbank den Verkäufer anhand der ID, die uns in der Anfrage gesendet wurde, und weisen diesen Verkäufer in data zu (schließlich sind die Verkäuferdaten auch auf dem Server gespeichert ;) ):

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

Als nächstes erstellen wir in der Datenbank für dieses Produkt ein Objekt für Reaktionen. Und nun, da wir alle notwendigen Felder für das Produkt haben, erstellen wir in der Datenbank das Produkt selbst:

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

Fügen wir eine Verzögerung ein und geben in der letzten Codezeile für unseren Callback die Antwort mit dem Produkt zurück:

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

Damit sind wir mit dem Server vollständig fertig und werden nicht mehr darauf zurückkommen.

Übrigens, noch eine nützliche Sache. Nach der Zeile export const worker = setupWorker(...handlers) können Sie folgenden Code hinzufügen:

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

Und nun können Sie das Ergebnis der Ausführung jedes Handlers in der Browser-Konsole sehen.

Unser Server ist natürlich nicht echt, und wenn wir die Seite im Browser zwangsweise aktualisieren, verschwinden alle unsere neuen Produktobjekte.

Öffnen Sie Ihre Studenten-Anwendung. Öffnen Sie darin die Datei server.js. Fügen Sie dem Array handlers die Verarbeitung einer POST-Anfrage hinzu. Im Body dieser Anfrage werden Sie die Daten des neu hinzugefügten Studenten empfangen.

Entpacken Sie im Body des Callbacks für Ihren http.post die Daten und senden Sie im Fehlerfall eine entsprechende Antwort.

Wenn alles in Ordnung ist, dann finden Sie in der Datenbank den Dozenten anhand der erhaltenen ID und weisen Sie ihn den Daten zu. Weisen Sie den Daten auch ein auf der Datenbank basierendes Objekt votes zu.

Erstellen Sie aus den gesammelten Daten ein Objekt student mit dem neuen Studenten und senden Sie es in der Serverantwort zurück.

Deutsch
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskΕλληνικά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
Wir verwenden Cookies für den Betrieb der Website, Analyse und Personalisierung. Die Datenverarbeitung erfolgt gemäß der Datenschutzerklärung.
alle akzeptieren anpassen ablehnen