3 votes

Erreur de flux non gérée dans un pipe en Node.js

J'utilise un proxy local dans Node.js et Express avec le code suivant :

app.post('/', function(req, res){
  var newurl =  req.body.url;
  var options = {
    url: newurl,
    headers: {
     'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
     'Accept-Language':'ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4',
     'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36'
    }
  };
  res.writeHead(200, {
    'Content-Type': 'text/html',
    'Access-Control-Allow-Origin' : '*'});
  try {
    request(options).pipe(res);
  } catch (err) {
    res.write(err.message);
    res.end();
  }
});

Cela fonctionne bien pour la majorité des sites Web, mais lorsque j'essaie de récupérer les pages de certains des sites Web, Node affiche l'erreur suivante :

stream.js:74
      throw er; // Unhandled stream error in pipe.
      ^

Error: socket hang up
    at createHangUpError (_http_client.js:200:15)
    at Socket.socketOnEnd (_http_client.js:285:23)
    at emitNone (events.js:72:20)
    at Socket.emit (events.js:166:7)
    at endReadableNT (_stream_readable.js:905:12)
    at nextTickCallbackWith2Args (node.js:437:9)
    at process._tickCallback (node.js:351:17)

Cela ne se produit pas à chaque fois pour une page donnée, mais plutôt de temps en temps. Donc, même après quelques recherches sur Internet, je n'arrive pas à trouver comment résoudre ce problème.

0voto

Sarath Ak Points 851

C'est ainsi que j'ai résolu le problème. J'ai supprimé le try-cache et ajouté un événement d'erreur

request({...}).on('error', error => {
res.status(502).send(error.message);
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X