2016-06-04 21 views
8

ho provato l'invio di alcuni dati del modulo al mio server nodo ma req.body ha nessuno della mia forma campi lato nodo diCome gestire formdata da Express 4

var express = require('express') 
var app = express() 
var path = require('path') 
var bodyParser = require('body-parser') 
app.use(bodyParser.urlencoded({ 
    extended: true 
})); 

app.get('/', function (req, res) { 
    res.sendFile('index.html') 
}) 
app.post('/sendmail', function (req, res) { 

    const formData = req.body.formData 

questo è quello che sto inviando dal browser

fetch('/send', { 
    method: 'POST', 
    body: new FormData(form) 
}) 

in strumenti di sviluppo ho solo vedere i dati passati nel Referer, forse è questo il mio problema

Referer: http://localhost:3000/?name=&budget=%C2%A31000

+0

'corpo-parser' non gestisce i corpi di richiesta più parti, provare qualcosa di simile [' multer'] (https: // www.npmjs.com/package/multer). – robertklep

+0

@robertklep Vedo grazie, sentitevi liberi di aggiungerlo per rispondere. Forse sarebbe più semplice se aggiungessi semplicemente i dati a JSON? Sono sorpreso di poter passare semplicemente FormData per il recupero e il suo invio come multipart. – SuperUberDuper

risposta

21

body-parser non gestisce i corpi multipart, che è quello che viene inviato come FormData.

Utilizzare invece un modulo come multer.

Ad esempio, per recuperare i (regolari) Campi di una richiesta:

let multer = require('multer'); 
let upload = multer(); 

app.post('/send', upload.fields([]), (req, res) => { 
    let formData = req.body; 
    console.log('form data', formData); 
    res.sendStatus(200); 
}); 
+1

thx, sapere di qualsiasi utilità per prendere i dati del modulo e restituirlo come oggetto JSON (per cose come input di testo e simili) per l'invio tramite urlencoded – SuperUberDuper

+1

@SuperUberDuper, probabilmente devi usare qualcosa come ['formData.entries()' ] (https://developer.mozilla.org/en-US/docs/Web/API/FormData/entries) per creare un oggetto JS dal contenuto del modulo. – robertklep

+0

Cosa succede dietro la scena qui 'upload.fields ([])'? – Ced