如何在Node JS中下载大文件时捕获Internet断开事件

时间:2018-11-15 18:21:07

标签: node.js http request

我需要从远程服务器下载一个大文件(例如:从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))

例如,如果我需要下载500MB的文件,而我已经下载了例如100MB的文件,突然我失去了互联网连接,因此该文件将不再被下载,并且不会出现任何错误。

请帮助

1 个答案:

答案 0 :(得分:0)

我找到了适合自己的解决方案。 这是代码,可以帮助我设置如此长的请求超时时间。

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秒后会引发超时事件

相关问题