2015-06-13 2 views
0

Я имею конечную точку в приложении узла, который используется для загрузки изображенийузла запрос труба висит через несколько часов

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

Попробуйте настроить таймаут для 'request.get()'. – robertklep

ответ

2

Вы должны добавить прослушиватель ошибок по вашему запросу, потому что ошибки не передаются в трубах. Таким образом, если ваш запрос имеет ошибку, он закроет соединение, и вы получите причину.

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

Любые ошибки в 'request.get()' будут выбрасываться независимо от наличия обработчика 'error' (хотя наличие явного обработчика ошибок здесь не так уж и плохо). – robertklep

+0

Не могли бы вы объяснить, почему эта ошибка будет выбрана независимо? – wazzaday

Смежные вопросы