Вы можете использовать модуль stream-to
, который может преобразовывать данные читаемого ручья в массив или буфер:
var streamTo = require('stream-to');
req.form.on('part', function (part) {
streamTo.buffer(part, function (err, buffer) {
// Insert your business logic here
});
});
Если вы хотите лучше понять, что происходит за кулисами, вы можете реализовать логику самостоятельно, используя Writable
stream. В качестве записывающего средства реализации потока вам нужно только определить одну функцию: _write
method, которая будет вызываться каждый раз, когда некоторые данные записываются в поток. Когда поток ввода будет завершен, данные будут испускать: end
event: мы создадим буфер, используя Buffer.concat
method.
var stream = require('stream');
var converter = new stream.Writable();
converter.data = []; // We'll store all the data inside this array
converter._write = function (chunk) {
this.data.push(chunk);
};
converter.on('end', function() { // Will be emitted when the input stream has ended, ie. no more data will be provided
var b = Buffer.concat(this.data); // Create a buffer from all the received chunks
// Insert your business logic here
});
Для записываемых потоков, я считаю, что событие «закончено», а не «конец». Оба они означают одно и то же, но их нужно назвать по-другому, потому что они сосуществуют на Трансформации. https://nodejs.org/api/stream.html#stream_event_finish – noderman