Estoy enviando datos de un formulario desde la aplicación reactjs usando axios, que se describe en el código a continuación. El expreso está configurado correctamente y aún así el req.body está vacío. ¿Qué estoy haciendo mal en este caso?
import bodyParser from 'body-parser'; app.use(busboy()); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true }));reaccionar
export const createAd = (token, ad) => async (dispatch) => { const headers = { headers: { "content-type": "multipart/form-data", Authorization: `Bearer ${token}`, }, }; for (var pair of ad.entries()) { console.log(pair[0] + ', ' + pair[1]); } const response = await api .post("/ads/create/", ad, headers) .catch((error) => { dispatch({ type: constants.PUSH_ERROR, payload: error }); }); if (response && response.status === 201) { dispatch({ type: constants.CREATE_AD, payload: response.data.ad }); } };punto final de API
export const createAd = async (req, res) => { try { const bb = busboy({ headers: req.headers }); bb.on('file', async (name, file, info) => { console.log("*Uploading files") const { filename, encoding, mimeType } = info; var saveTo = 'public/ads/' + filename file.pipe(fs.createWriteStream(saveTo)); file.resume(); }); bb.on('finish', () => { console.log('Upload complete'); res.writeHead(200, { 'Connection': 'close' }); res.end("That's all folks!"); }); console.log(req.body) // empty body here {} res.status(201).send({ message: "Ad created.", ad: {} }); } catch (error) { res.status(400).send(error) console.error(error) } }Usando la biblioteca multipartita también puede hacer esto.
app.post('/ads/create/', function (req, res) { var form_data = new multiparty.Form(); form_data.parse(req, function(err, fields, files) { // fields fields fields }); })