Задать вопрос
Emptyform
@Emptyform

Ошибка при работе с fs.ReadStream: получение пустых данных на последнем on('readable'). Почему?

Привет!

Код (учебный):
'use strict';

let fs = require('fs');

module.exports = (res, filePath) => {
    let stream = new fs.ReadStream(filePath);
    stream
        .on('readable', () => {
            console.log('on readable');
            let data = stream.read();
            res.write(data);        // <=== здесь ошибка
        })
        .on('end', () => {          // <-- сюда не заходит
            console.log('on end');
            res.end('');
        })
        .on('close', () => {        // <-- сюда не заходит
            console.log('on close');
        })
        .on('error', (err) => {     // <-- сюда не заходит
            console.log('on error :: ' + err.code + '; ' + err.message);
            res.statusCode = 400;
            res.end('Bad request');
        })
    ;
};


СЛУЧАЙ 1:
Передаю на вход имя файла с картинкой, картинка на клиенте отрисовывается, а сервер падает с текстом "First argument must be a string or Buffer" и указывает на строку res.write(data); - там и в самом деле, в последнем событии readable функция stream.read(); возвращает null
У меня такие вопросы:
1.1 - почему сработал readable, если данных нет? (понятно что можно написать if (data) res.write(data); но это костыль, как мне кажется)
1.2 - почему on('error') не перехватил ошибку?
1.3 - почему on('close') не сработал?
1.4 - как правильно защититься от подобных ошибок, где их перехватывать, чтобы сервер не падал?

СЛУЧАЙ 2:
Передаю ему на вход текстовый файл в кодировке windows-1251 на экране - закорючки. Пытался при открытии потоку указывать вторым параметром {encoding: 'windows-1251'} Результат: Unknown encoding: windows-1251
2.1 - где можно найти список значений для encoding для разных кодировок ?
2.2 - можно ли как-то узнать кодировку текстового файла во время работы скрипта?
  • Вопрос задан
  • 529 просмотров
Подписаться 1 Оценить 6 комментариев
Пригласить эксперта
Ваш ответ на вопрос

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

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