PAJCH
@PAJCH

Как сейчас работает response в nodejs?

Привет
proto.sendFile = function (dirname, filename) {
// Контекст this это res
  var filename = filename ? dirname + filename : dirname
  var file = new fs.ReadStream(filename)

  file.on("error", function (err) {
    console.log("Error reading file %s : %s", filename, err)
  })

  this.on("close", function () {
    file.destroy()
  }) 

  file.pipe(this)
}


У меня не вызывается событие close для объекта response, а нужно оно мне, когда у пользователя скорость слабая и пользователь при отдаче половина файла, отключился, а если он отключится при отдаче половина файла, все это зависнет в памяти.

Или же это уже предусмотрено nodejs?
в объекте ReadStream есть свойство autoclose, может оно имеет значени?

ReadStream {
  _readableState: 
   ReadableState {
     objectMode: false,
     highWaterMark: 65536,
     buffer: [],
     length: 0,
     pipes: null,
     pipesCount: 0,
     flowing: null,
     ended: false,
     endEmitted: false,
     reading: false,
     sync: true,
     needReadable: false,
     emittedReadable: false,
     readableListening: false,
     defaultEncoding: 'utf8',
     ranOut: false,
     awaitDrain: 0,
     readingMore: false,
     decoder: null,
     encoding: null },
  readable: true,
  domain: null,
  _events: { end: [Function], error: [Function] },
  _eventsCount: 2,
  _maxListeners: undefined,
  path: './config.js',
  fd: null,
  flags: 'r',
  mode: 438,
  start: undefined,
  end: undefined,
  autoClose: true,
  pos: undefined }
  • Вопрос задан
  • 282 просмотра
Решения вопроса 1
MarcusAurelius
@MarcusAurelius Куратор тега Node.js
автор Impress Application Server для Node.js
Ничего в памяти не зависнет, file.destroy() на this.on("close"... не нужно вызывать ни в случае успеха, ни в случае ошибки, после вызова pipe все случится автоматически.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы