⊗jsrxPmATDS 53 of 57 menu

Procesamiento de una solicitud POST enviada usando thunk en Redux

Hemos obtenido los datos de productos y vendedores del servidor y los mostramos en la aplicación. Pero con thunk no solo se pueden obtener, sino también enviar datos. Aprendamos cómo hacerlo.

Después de agregar un nuevo producto, este permanece en nuestro store, es decir, dentro de nuestra aplicación. Hagamos que el nuevo producto se guarde en el servidor.

Empecemos con el servidor. Aquí tendremos que procesar no una solicitud GET, sino una solicitud POST, ya que al servidor ahora llegarán los datos del producto, que guardaremos allí.

Abramos nuestra aplicación de productos, y en ella el archivo server.js. Encontremos en él el array handlers y agreguemos otro manejador para la solicitud POST. Aquí recibiremos también el cuerpo de la solicitud, por lo que en el callback debemos pasar request:

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

Ahora, dentro de las llaves, escribamos el código de nuestro callback. Para empezar, extraigamos los datos de la solicitud y en caso de error enviemos desde el servidor una respuesta indicando que no pudimos guardar los datos y el estado 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', }, }) } })

Si los datos están correctos, entonces en la base de datos buscaremos al vendedor por el id que nos llegó en la solicitud y escribiremos este vendedor en data (¡los datos del vendedor también se almacenan en nuestro servidor! ;) ):

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

A continuación, en la base de datos crearemos un objeto de reacciones para este producto. Y ahora, teniendo todos los campos necesarios para el producto, creemos en la base de datos el producto en sí:

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

Pongamos un retraso y en la última línea de código para nuestro callback devolvamos la respuesta con el producto:

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

Con esto, hemos terminado completamente con el servidor y no volveremos a él.

Por cierto, otra cosa útil. Después de la línea export const worker = setupWorker(...handlers) puedes agregar el siguiente código:

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

Y ahora podrás ver el resultado de la ejecución de cada manejador en la consola del navegador.

Por supuesto, nuestro servidor no es real y si forzamos la actualización de la página en el navegador, todos nuestros nuevos objetos de productos desaparecerán.

Abre tu aplicación de estudiantes. Abre en ella el archivo server.js. Agrega en el array handlers el manejo de una solicitud POST. En el cuerpo de esta solicitud recibirás los datos del nuevo estudiante agregado.

En el cuerpo del callback para tu http.post desempaqueta los datos y en caso de error envía la respuesta correspondiente.

Si todo está bien, entonces encuentra en la base de datos al profesor por el id recibido y escríbelo en los datos. Escribe también en los datos, el objeto votes creado a partir de la base de datos.

Con los datos recopilados crea un objeto student con el nuevo estudiante y envíalo en la respuesta del servidor.

Español
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Usamos cookies para el funcionamiento del sitio, análisis y personalización. El procesamiento de datos se realiza de acuerdo con la Política de privacidad.
aceptar todas configurar rechazar