2016-06-05 12 views
0

Ich kann einfach nicht verstehen, wie Parser-Bibliotheken wie oder sogar body-parser arbeiten. Aus welchen Daten in der Post-Anfrage erstellen sie den request.body. wenn ich eine Datei mit HTML-Formular hochladenKnoten js wie Parser-Bibliotheken arbeiten

<form method="post" action="/upload" enctype="multipart/form-data"> 
     <input type="file" name="file"/> 
     <input type="submit" value="upload"> 
</form> 

und poste ich nur die Anfrage wie es ist, konnte ich nicht jeden Teil der Datei finden, die (wie Dateiname oder Größe ...) hochgeladen wurde. Aber wenn ich multer verwende, erscheint es einfach in request.body und request.file, wie?

+1

Ich glaube, Sie brauchen, um zu setze die Header des Posts auf Content-Type: application/json um den Body-Parser zu benutzen – user2950720

Antwort

1

Der Hauptteil der Anfrage, der die Daten aus dem Formular (oder Ajax-Anfrage usw.) enthält, muss explizit gelesen werden. Es ist erreichbar mit dem request, einem IncomingMessage, als Readable stream.

Zum Beispiel kann ein Grund nehmen auf bodyParser.urlencoded() könnte folgende sein, Abrufen des Körpers aus dem request in „Modus fließt“ durch die 'data' und 'end' Ereignisse mit:

var querystring = require('querystring'); 

app.use(function (request, response, next) { 
    // skip middleware if not relevant to the current request 
    if ('application/x-www-form-urlencoded' !== request.headers['content-type']) 
     return next(); 

    var chunks = []; 

    // The 'data' event can occur multiple times 
    // each given only part of the message. 
    // So, just collect the parts at this point. 
    request.on('data', function (chunk) { 
     chunks.push(chunk); 
    }); 

    // The 'end' event occurs once after all 'data' chunks have arrived. 
    // Now, it's ready to parse. 
    request.on('end', function() { 
     try { 
      // combine all of the 'data' chunks together 
      var bodyContent = Buffer.concat(chunks); 

      // parse and modify the `request` so the data is accessible later 
      request.body = querystring.parse(bodyContent); 

      next(); // success 
     } catch (error) { 
      next(error); 
     } 
    }); 

    request.on('error', function (error) { 
     next(error); 
    }); 
}); 
+0

Danke für die Erklärung. Dieses Objekt ist mir jetzt klarer. –