节点请求管道在几个小时后挂起

时间:2015-06-13 12:42:37

标签: node.js

我在节点应用程序中有一个用于下载图像的端点



var images = {
  'car': 'http://someUrlToImage.jpg',
  'boat': 'http://someUrlToImage.jpg',
  'train': 'http://someUrlToImage.jpg'  
}

app.get('/api/download/:id', function(req, res){
  
    var id = req.params.id;

    res.setHeader("content-disposition", "attachment; filename=image.jpg");
    request.get(images[id]).pipe(res);

});




现在这段代码工作正常,但是在应用程序运行几个小时之后,端点就会挂起。

我正在监视应用程序的内存使用情况,该内存使用情况保持一致,而且只返回一些JSON的任何其他端点正常响应,因此不会以某种方式阻止事件循环。在使用请求模块管道响应时,是否存在某种缺陷?或者有更好的解决方案来实现这一目标吗?

我也在使用Express模块​​。

1 个答案:

答案 0 :(得分:2)

您应该在请求中添加错误侦听器,因为错误不会在管道中传递。这样,如果您的请求有错误,它将关闭连接,您将得到原因。

request
.get(...)
.on('error', function(err) {
  console.log(err);
  res.end();
})
.pipe(res)