Défaut express
ne met pas les données en mémoire tampon, à moins que vous n'ajoutiez un intergiciel pour le faire. La solution simple consiste à suivre l'exemple de la réponse de @Stewe ci-dessous, ce qui revient à concaténer toutes les données vous-même. Par ex.
var concat = require('concat-stream');
app.use(function(req, res, next){
req.pipe(concat(function(data){
req.body = data;
next();
}));
});
L'inconvénient est que vous avez maintenant déplacé tout le contenu du corps du POST dans la RAM sous forme d'un bloc contigu, ce qui n'est peut-être pas nécessaire. L'autre option, qui mérite d'être envisagée mais qui dépend de la quantité de données que vous devez traiter dans le corps du message, consiste à traiter les données sous forme de flux.
Par exemple, avec le XML, vous pouvez utiliser un analyseur XML qui prend en charge l'analyse du XML lorsqu'il arrive sous forme de morceaux. Un tel analyseur serait Flux XML . Vous faites quelque chose comme ça :
var XmlStream = require('xml-stream');
app.post('/', function(req, res) {
req.setEncoding('utf8');
var xml = new XmlStream(req);
xml.on('updateElement: sometag', function(element) {
// DO some processing on the tag
});
xml.on('end', function() {
res.end();
});
});