Как я могу прослушать событие внутри настраиваемого читаемого потока в NodeJS? - PullRequest
0 голосов
/ 05 декабря 2018

Это мой код:

class Counter extends Readable {
    constructor() {
        super();
    }
    _read () { 
        readStream.on('data', (data) => {
            console.log(JSON.stringify(data));
            this.push(JSON.stringify(data));
        });
        readStream.on('end', () => {
            this.push(null);
        });
    }
}

Я получаю эту ошибку, и обработка также становится очень медленной.

(node:18488) MaxListenersExceededWarning: Possible EventEmitter memory 
leak detected. 11 end listeners added. Use emitter.setMaxListeners() 
to increase limit (node:18488) MaxListenersExceededWarning: Possible 
EventEmitter memory leak detected. 11 data listeners added. Use 
emitter.setMaxListeners() to increase limit

Это мой полный код.В основном, я хочу читать CSV.Преобразуйте его в JSON и запишите в файл.Я хочу сделать эту операцию, используя поток.Я использую модуль csv-parser npm

const  fs = require('fs');
var Readable = require('stream').Readable; 
const csv = require('csv-parser');


class Counter extends Readable {
   constructor() {
       super();
   }
   _read () { 
       readStream.on('data', (data) => {
           console.log(JSON.stringify(data));
           this.push(JSON.stringify(data));
       });
       readStream.on('end', () => {
           this.push(null);
       });
   }
}
let writeStream = fs.createWriteStream('tmp1');
let readStream = fs.createReadStream('tmp.csv').pipe(csv());
var counter = new Counter(); 
counter.pipe(writeStream); 

1 Ответ

0 голосов
/ 06 декабря 2018

Я попытался записать файл 1.48GB csv в виде массива json в файл, он не выдал никаких ошибок или предупреждений, о которых вы упомянули.

const http = require('http');
const fs = require('fs');
const csv = require('csv-parser');

const server = http.createServer();

const writeStr = fs.createWriteStream('data.json', { flags: 'a' });
writeStr.write('[\n');
let sep = "";

server.on('request', (req, res) => {
    console.log(req.method);

    fs.createReadStream('./Crimes_-_2001_to_present.csv').pipe(csv())
        .on('data', function (data) {
            writeStr.write(sep + JSON.stringify(data));
            if (!sep)
                sep = ",\n";
        })
        .on('end', function () {
            writeStr.write('\n]')
            console.log('DONE WRITING FILE');
            res.end();
        })
        .on('error', function (err) {
            consol.log(err);
        })
})
server.listen(8000);

К вашему сведению: набор данных взят из https://catalog.data.gov/dataset?res_format=CSV

...