Привет!
Код (учебный):
'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 - можно ли как-то узнать кодировку текстового файла во время работы скрипта?