¿Cómo capturar FormData que se pasa de AJAX a NodeJS?

¿No estoy seguro de dónde está mal el código en el cliente o en el servidor? Funciona si no envío un FormData (req.body lee la información) pero una vez que lo cambié a FormData ya que estoy intentando enviar una imagen junto con algunas cadenas, aparece un error 500 en el lado del servidor en el título. longitud console.log

Req.body con mi actual body-parser no extrae FormData siendo devuelto por la solicitud AJAX JS …

Este es mi lado JS:

var newProjectImage = $("#filebutton").get(0).files[0]; var formData = new FormData(); formData.append('picture', newProjectImage); formData.append('title', newProjectTitle.trim()); $.ajax({ type: "POST", url: "/adminAddProject", data: formData, cache: false, dataType: 'json', processData: false, // Don't process the files contentType: false, // Set content type to false as jQuery will tell the server its a query string request success: function (data) { if(data) { alert("Product added"); successAddProject(data); enableAddProjectButtons(); } else { alert("data does not exist "); enableAddProjectButtons(); } console.log("the data returned is " + JSON.stringify(data)); } }); 

Este es el lado de NodeJS:

Mi app.js tiene esto para parsear el cuerpo:

 app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); 

Entonces la ruta es esta:

 router.post('/adminAddProject', function(req, res) { console.log("Called admin add " + JSON.stringify(req.body)); if(req.cookies.token) { console.log("Called admin token passes"); if(req.body) { console.log("Called admin body is real "); var title; title = req.body.title; console.log("Called admin body is real " + title.length); 

De acuerdo con los documentos de BodyParser, para la carga de datos de varias partes tiene que usar diferentes módulos, elegí formidable. https://github.com/expressjs/body-parser

 var form = new formidable.IncomingForm({ uploadDir: '_dirname', keepExtensions: true }); // parse a file upload form.parse(req, function(err, fields, files) { })