我在节点应用程序中有一个用于下载图像的端点
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模块。
答案 0 :(得分:2)
您应该在请求中添加错误侦听器,因为错误不会在管道中传递。这样,如果您的请求有错误,它将关闭连接,您将得到原因。
request
.get(...)
.on('error', function(err) {
console.log(err);
res.end();
})
.pipe(res)