Soy un novato en Express, por lo que he investigado bastante sobre este problema, pero no puedo hacerlo bien. Así que necesito pasar una matriz como esta ["1","2","3","4","5"] como una carga útil de Frontend, y en Express necesito aceptarla y hacer cosas con ella . Hasta ahora, puedo enviarlo desde Frontend y recibirlo en Express, pero el contenido de lo que recibo no se ve bien. En el Express recibo:
POST / 200 3.239 ms - 97 { '"1","2","3","4","5"': '' }así que no puedo hacer nada con esto. Intenté enviar un objeto llamado params y recibir eso para hacer algo con eso, eso tampoco funcionó.
Los encabezados de frontend son así
Request URL: http://localhost:5000/ Request Method: POST Status Code: 200 OK Remote Address: [::1]:5000 Referrer Policy: strict-origin-when-cross-origin Access-Control-Allow-Origin: * Connection: keep-alive Content-Length: 36 Content-Type: application/json; charset=utf-8 Date: Mon, 13 Dec 2021 23:06:58 GMT ETag: W/"24-sEnfXlyl7goDTpCx3bZVIGauJsc" Keep-Alive: timeout=5 X-Powered-By: Express Accept: application/json, text/plain, */* Accept-Encoding: gzip, deflate, br Accept-Language: en-US,en;q=0.9 Connection: keep-alive Content-Length: 21 Content-Type: application/x-www-form-urlencoded DNT: 1 Host: localhost:5000 Origin: http://localhost:3000 Referer: http://localhost:3000/ sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="96", "Google Chrome";v="96" sec-ch-ua-mobile: ?0 sec-ch-ua-platform: "Windows" Sec-Fetch-Dest: empty Sec-Fetch-Mode: cors Sec-Fetch-Site: same-site User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36La configuración rápida que se relaciona con esto es como
var express = require("express"); ... var app = express(); ... app.use(express.json()); app.use(express.urlencoded({ extended: true })); app.post("/", (req, res) => { res.json({ requestBody: req.body }); }); Entonces, ¿cómo puedo enviar como parte del cuerpo desde la interfaz en ReactJS una matriz ["1","2","3","4","5"] y luego aceptarla como matriz en Express y hacer cosas con ella?
NO debe enviar un objeto llamado params . Desde su solicitud POST, debe enviar la matriz como una propiedad del cuerpo de la solicitud. Luego estará disponible en la propiedad req.body en la aplicación Express.
Lo que muestra como la solicitud:
POST / 200 3.239 ms - 97 { '"1","2","3","4","5"': '' }Y, los encabezados que muestra como:
Content-Type: application/x-www-form-urlencoded No coinciden. Sus datos se envían como texto sin formato. No es application/json o application/x-www-form-urlencoded por lo que no tiene un analizador de cuerpo instalado, por lo que Express no sabe qué hacer con él. De hecho, Express ni siquiera lo lee, simplemente permanece en el flujo entrante.
No muestra el código del lado del cliente, pero el cliente necesita hacer que el content-type y la codificación del contenido del cuerpo que envía con el POST coincidan realmente. Luego, necesita un analizador de cuerpo para ese content-type en el lado Express de las cosas.
Dado que esto está destinado a ser una matriz de datos, sugeriría usar JSON y enviar datos codificados de aplicación/json. Luego, su middleware express.json() existente lo leerá y analizará por usted y podrá leer los datos en req.body .
Si desea ayuda para arreglar el lado del cliente, muéstrenos el código del lado del cliente que envía esto.
Por ejemplo, si estaba enviando esto desde el cliente con fetch() , aquí hay un ejemplo directamente desde el documento de MDN para fetch() :
// Example POST method implementation: async function postData(url = '', data = {}) { // Default options are marked with * const response = await fetch(url, { method: 'POST', // *GET, POST, PUT, DELETE, etc. headers: {'Content-Type': 'application/json'}, body: JSON.stringify(data) // body data type must match "Content-Type" header }); return response.json(); // parses JSON response into native JavaScript objects } postData('https://example.com/answer', { answer: 42 }) .then(data => { console.log(data); // JSON data parsed by `data.json()` call });