Ich habe eine einfache Knoten-App, die Metriken von Clients schreiben sollte. Clients senden Metriken im JSON-Format, das mit dem zlib-Modul von Python gezippt wurde. Ich versuche, eine Middleware hinzuzufügen, um den Anforderungspost zu entpacken, bevor der Express-BodyParse stattfindet.Entpacken POST Körper mit Knoten + Express
Meine Middle sind einfach die per Express standardmäßig zur Verfügung gestellt diejenigen:
app.configure(function(){
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser('your secret here'));
app.use(express.session());
app.use(app.router);
app.use(require('less-middleware')({ src: __dirname + '/public' }));
app.use(express.static(path.join(__dirname, 'public')));
});
Ich habe versucht, eine einfache Middleware hinzufügen, die die Daten bekommt und dann unzips:
app.use(function(req, res, next) {
var data = '';
req.addListener("data", function(chunk) {
data += chunk;
});
req.addListener("end", function() {
zlib.inflate(data, function(err, buffer) {
if (!err) {
req.body = buffer;
next();
} else {
next(err);
}
});
});
});
Das Problem ist mit zlib.inflate bekomme ich diesen Fehler:
Die Daten wurden mit komprimiert python zlib-modul:
zlib.compress(jsonString)
aber scheint, dass weder entpacken, aufblasen, gunzip funktioniert.
Sind Sie sicher, dass Sie nicht ein „err“ von zlib.unzip erhalten und als Ergebnis Das nächste() wird nicht aufgerufen? Wenn dies der Fall ist, versuchen Sie, die Daten in ein Array zu schalten. Überprüfen Sie diese Antwort http://StackOverflow.com/A/12776856/30763 Darüber hinaus stellen Sie sicher, dass Ihre Middleware vor bodyParser verwendet wird. – Aaron
Diese Antwort ist nicht zum Entpacken einer Anfrage von Knoten und nicht vom Client erledigt? – alex88
@ alex88 In jedem Fall sollten Sie 'next (err)' aufrufen, wenn ein Fehler vorliegt. Ich schlage auch vor, dass Sie auf die 'bodyParser'-Middleware verzichten und' req.body = JSON.parse (buffer) 'direkt ausführen. –