express req.pipe() ne fonctionne pas
- Je veux écouter à la réception d'une requête POST en express.
- Je veux pipe cette demande à un autre serveur
- Je veux recevoir une réponse à l'intérieur express gestionnaire (je ne veux pas de réponse canal pour exprimer res stream)
Pour maintenant j'ai le code suivant:
app.post('server1',function(req,res,next){
var request = require('request');
req.pipe(request.post('server2')).pipe(res);
}
Donc cela ne fonctionne pas - la demande n'est pas encore joué à server2 - je l'ai vérifié et il n'y a pas de demande entrante.
J'ai résolu les points 1 & 2 comme ceci:
var bodyParser = express.bodyParser();
app.use(function(req,res,next){
if(req.path == '/server1' && req.method == 'POST') {
return next();
}
else {
bodyParser(req,res,next);
}
});
Pas très agréable, mais il fonctionne: il suffit d'désactive bodyparser pour un trajet simple (POST /serveur1).
Mais je ne sais toujours pas comment faire pour obtenir une réponse json corps de canalisations demande - je avoir code suivant:
app.post('/server1',function(req,res,next){
var request = require('request');
var pipe = req.pipe(request.post('/server2'));
pipe.on('end',function(){
var res2 = pipe.response;
console.log(res2);
});
});
res2
objet a corriger statusCode et les en-têtes et ainsi de suite, mais il ne contient pas de corps - comment puis-je obtenir ce à partir de la res2
objet? /server2
retourne des données en json mais je ne sais pas comment les lire à partir de la réponse...
- Cela signifie probablement que
req
a déjà été lu à l'achèvement -- pour son'end'
- peut-être parbodyParser()
. Un flux de ne pas redémarrer une nouvelle.pipe()
après. - Ainsi donc, comment je peux le faire a pas été lu à la réalisation? Ou comment je peux procéder à un flux de déjà lu demande? J'ai des tuyaux de la demande car il est de téléchargement de fichiers il...
- Je edites ma question - votre commentaire sur
bodyParser
m'a beaucoup aidé - j'ai juste besoin de résoudre dernier point (3). - Toutes mes requêtes post cessé de tuyauterie après avoir procédé à quelques changements, y compris la configuration d'un corps analyseur de tous les postes clients.. ne sais pas combien de temps j'aurais été cogner ma tête contre le bureau si ce n'était pas pour votre commentaire Merci! 🙂
Vous devez vous connecter pour publier un commentaire.
Cela ne fonctionne pas car bodyParser intercepte tous les organes avec des analyseurs de
Je pense que vous y êtes presque. Vous devriez écouter sur
data
événements sur le tuyau pour recueillir la réponse:Cependant, depuis que vous avez résolu le "bodyParser() de façon" problème, vous pouvez également utiliser votre première pipe de configuration si vous voulez juste de retour de la réponse générée par le serveur2 (aussi, assurez-vous d'utiliser la bonne URL lors de l'utilisation de
request
).