2016-07-02 16 views
1

Ich sende FormData mit einer Datei und einem Feld an eine Route auf meinem Server, habe aber Probleme mit connect-busboy, um beide Ereignisse auszulösen.Wenn ich FormData mit einer Datei und einem Feld sende, feuert busboy nur das Dateiereignis

Auf der Client-Seite habe ich:

var data = new FormData(); 
data.append('file', MyFile); 
data.append('key_one', 'value_one'); 

ich verwende holen so dann auf den Körper Eigenschaft des Objekts holen I-Daten zugeordnet werden.

fetch(url, { 

method: 'POST', 
body: data 

}).then(...){...}.catch(...){...} 

Auf der Server-URL Route:

ich die busboy Middleware mit

limits: {fileSize: 5 * 1024 * 1024, parts: 2} 

Dann habe ich,

ist
req.pipe(req.busboy); 

req.busboy.on('field', function(key, value){ 
    console.log('field fired'); 
} 

req.busboy.on('file', function(fieldname, file, filename){ 
    console.log('file fired'); 
} 

Mein Problem konfiguriert verwenden, dass ich nur bekommen ' Datei gefeuert '. Wenn ich den Datei-Listener raushole, werde ich 'Feld gefeuert' bekommen. Weiß jemand, warum nur Datei mit dieser Einrichtung gefeuert wird? Außerdem sind die einzigen anderen Mittel, die ich gerade benutze, CookieParser, ExpressSession und Pass.

Danke!

Antwort

1

Nachdem ich einen weiteren Blick auf die Dokumentation geworfen hatte, erkannte ich, dass ich mit dem lesbaren Stream umgehen musste. In meinem Fall ist "Datei" der Stream.

req.busboy.on('file', function(fieldname, file, filename){ 
    console.log('file fired'); 
    file.resume(); 
} 

Dies behoben mein Problem.