Если вы используете express.js или какой-либо фреймворк, построенный поверх него, вы можете просто направить поток чтения к ответу, так как ответы express являются потоками для начала:
const es = require('event-stream')
...
let getFileStream = path => (
fs.createReadStream(path)
.pipe(es.split())
.pipe(es.map(function (data, cb) {
cb(null
, inspect(JSON.parse(data)))
}))
);
router.get('/message', function (req, res, next) {
let file$ = getFileStream(yourFilePath)
file$.on('error', next).pipe(res)
})
Если вам нужно преобразоватьсодержимое файла, вы можете использовать transform stream или, как показано в примере выше, синхронное отображение потока событий.Идея состоит в том, чтобы всегда поиграться с содержимым файла на уровне потока, чтобы избежать необходимости загружать все содержимое файла в память.
Вы действительно не хотите буферизовать все содержимое файла в памяти.Это может быстро стать проблемой с огромными файлами в напряженный день.что вам нужно, это направить поток файлов прямо в браузер.Тот же принцип применим к любому типу потребителей.
Конечно, если механизм полностью внутренний, вы должны только передавать путь к файлу или реальный поток, пока вам не потребуется фактически открыть файл и что-то сделать ссодержание.В этом случае вы вернетесь к своему потоковому инструментарию, будь то реализация нативного потокового API-интерфейса node.js, пакет события-потока или какая-то наблюдаемая библиотека, например rxjs.