как поймать событие отключения Интернета при загрузке большого файла в узле JS - PullRequest
0 голосов
/ 15 ноября 2018

Мне нужно загрузить большой файл с удаленного сервера (например, с amazon). Но у меня очень плохое интернет-соединение, поэтому он может отключиться на несколько секунд и автоматически переподключиться, но в этом случае загрузка зависает, и я не могупоймать это событие программно.Я использую код, очень похожий на этот:

const request = require('request')
request({
  uri: `${pathToRemoteFile}`,
  encoding: null
}).on('error', err => console.log(err)) // I suppose that here I will catch all possible errors like internet disconnect, but seems like no
.pipe(fs.createWriteStream(`${pathToStoreFileLocally}`))
.on('finish', () => { console.log('yeah, successfully downloaded') })
.on('error', err => console.log(err))

Так, например, если мне нужно загрузить файл размером 500 МБ, и я уже скачал, например, 100 МБ, и вдруг я потерял подключение к Интернету, поэтому файл больше не будет загружени никаких ошибок не возникнет.

помогите пожалуйста

1 Ответ

0 голосов
/ 25 ноября 2018

Я нашел решение, которое подходит для меня. Вот код, который помогает мне установить время ожидания для такого длинного запроса.

const request = require('request')
request({
  uri: `${pathToRemoteFile}`,
  encoding: null
}).on('error', err => console.log(err))
.on('socket', socket => {
   socket.setTimeout(30000);
   socket.on('timeout', () => {
      //handle disconnect
   })
 })
.pipe(fs.createWriteStream(`${pathToStoreFileLocally}`))
.on('finish', () => { console.log('yeah, successfully downloaded') })
.on('error', err => console.log(err))

Итак, часть, которую я искал:

 .on('socket', socket => {
   socket.setTimeout(30000);
   socket.on('timeout', () => {
      //handle disconnect
   })
 })

в потоке запросов. Таким образом, событие тайм-аута будет возбуждено после 30 секунд простоя на сокете

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...