Ich habe auch diese to the relevant issue on http-proxy
veröffentlicht.Knoten hängt an POST-Anfrage bei Verwendung von http-Proxy und Body-Parser mit Express
Ich benutze http-proxy
mit express
, so dass ich Anfragen zwischen meinem Client und API abfangen kann, um einige Cookies für die Authentifizierung hinzuzufügen.
Zur Authentifizierung muss der Client eine POST-Anfrage mit x-www-form-urlencoded
als Inhaltstyp senden. So verwende ich body-parser
Middleware, um den Anfragetext zu analysieren, damit ich Daten in die Anfrage einfügen kann.
http-proxy
hat ein Problem mit der Verwendung von body-parser
angeblich, weil es den Körper als Stream analysiert und nie schließt, damit der Proxy niemals die Anfrage nie abschließt.
There is a solution in the http-proxy examples dass "re-streams" die Anfrage, nachdem es analysiert wurde, die ich versucht habe zu verwenden. Ich habe auch versucht, die connect-restreamer
solution in the same issue ohne Glück zu verwenden.
Mein Code sieht wie folgt aus
var express = require('express'),
bodyParser = require('body-parser'),
httpProxy = require('http-proxy');
var proxy = httpProxy.createProxyServer({changeOrigin: true});
var restreamer = function(){
return function (req, res, next) { //restreame
req.removeAllListeners('data')
req.removeAllListeners('end')
next()
process.nextTick(function() {
if(req.body) {
req.emit('data', req.body) //error gets thrown here
}
req.emit('end')
})
}
}
var app = express();
app.use(bodyParser.urlencoded({extended: false, type: 'application/x-www-form-urlencoded'}));
app.use(restreamer());
app.all("/api/*", function(req, res) {
//modifying req.body here
//
proxy.web(req, res, { target: 'http://urlToServer'});
});
app.listen(8080);
und ich erhalte diesen Fehler
/Code/project/node_modules/http-proxy/lib/http-proxy/index.js:119
throw err;
^
Error: write after end
at ClientRequest.OutgoingMessage.write (_http_outgoing.js:413:15)
at IncomingMessage.ondata (_stream_readable.js:540:20)
at IncomingMessage.emit (events.js:107:17)
at /Code/project/lib/server.js:46:25
at process._tickCallback (node.js:355:11)
ich versucht habe, um den Fluss zu debuggen, aber für Strohhalme ergreife. Irgendwelche Vorschläge bitte ??
Nur frage mich, warum Sie einfach nicht ausdrücklich Middleware anstelle von http-Proxy? Sie können alle Anfragen mit Middleware abfangen/ändern. – jfriend00