node.js - Node.js 管道中未处理的流错误

标签 node.js error-handling unhandled-exception

我在 Node.js 和 Express 中使用本地代理,代码如下:

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();
  }
});

它适用于大多数网站,但当我尝试从某些网站检索页面时,Node 会抛出以下错误:

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)

对于任何给定页面,它不会每次都发生,而是时不时发生。因此,即使在互联网上进行了一些研究之后,我也无法弄清楚如何解决该问题。

最佳答案

这就是我解决问题的方法。 删除了 try-cache 并添加了错误事件

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

关于node.js - Node.js 管道中未处理的流错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36660430/

相关文章:

node.js - 如何在 Yarn 中从 github repo 安装包

javascript - 循环遍历任务 waterfall - promises bluebird

java - 哪个 java.lang.Error 后代可以安全捕获?

c# - 在 C# 中反序列化 XML 时出错

c++ - 从二进制文件输入字符串时出现未处理的异常 | Visual Studio

javascript - 是否有可能在 Q.All 中一次返回所有 "failures"

javascript - 无法修改已提交 FireStore 的 WriteBatch

javascript - 如何使用 React Hooks 执行错误边界

json - 未处理的异常 : type '(dynamic) => Welcome' is not a subtype of type '(String, dynamic) => MapEntry<dynamic, dynamic>' of 'transform'

.net - .Net ThreadPool 线程的异常