Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在不读取整个流的情况下获取CSV头_Node.js_Fs_Node Csv Parse - Fatal编程技术网

Node.js 在不读取整个流的情况下获取CSV头

Node.js 在不读取整个流的情况下获取CSV头,node.js,fs,node-csv-parse,Node.js,Fs,Node Csv Parse,我正在使用csv解析器节点模块捕获流式csv文件的标题;我正在使用一个内置在模块中的“headers”事件发射器 我正在循环通过我的getHeaders()函数传递的csv读流数组。在我捕获流式csv的标题之后,我想关闭该流,然后将下一个csv流传递到函数中,这样我就可以获得这些标题,然后关闭流,依此类推 最好的方法是什么?我尝试了几种不同的方法,包括.destroy(),但我还没有找到一种有效的解决方案。也许我试图在错误的地点关闭溪流?以下是我所拥有的: function getHeaders

我正在使用
csv解析器
节点模块捕获流式csv文件的标题;我正在使用一个内置在模块中的“headers”事件发射器

我正在循环通过我的
getHeaders()
函数传递的csv读流数组。在我捕获流式csv的标题之后,我想关闭该流,然后将下一个csv流传递到函数中,这样我就可以获得这些标题,然后关闭流,依此类推

最好的方法是什么?我尝试了几种不同的方法,包括
.destroy()
,但我还没有找到一种有效的解决方案。也许我试图在错误的地点关闭溪流?以下是我所拥有的:

function getHeaders(dataStream) {
    return new Promise((resolve, reject) => {
        dataStream
            .pipe(csv())
            .on('headers', (headers) => {
                let headerArray = Array.prototype.slice.call(headers);
                resolve(headerArray);                
                dataStream.destroy();
            })
            .on('error', (err) => {
                reject(`err from readingFile ${err}`)
            })          
    });
}

如何读取流的前2行,然后将数组作为可读流传输到csv

试试这个:

const lineReader = require('readline');
const Stream = require('stream')

function getHeaders(dataStream) {
    return new Promise((resolve, reject) => {
       let wantedLines = [];
       lineReader.createInterface({
         input: dataStream
       });
       lineReader.on('line', (line) => {
         if(wantedLines.length >= 2) {
           lineReader.close();
         }
       });
       lineReader.on('close', () => {
          let resolved = false;
          const readableStream = new Stream.Readable();
          readableStream
            .pipe(csv())
            .on('headers', (headers) => {
              if (!resolved) resolved = true;
              resolve(headers);
            })
            .on('error', reject);
            .on('close', () => {
              if (!resolved) resolve([]);
            });
          wantedLines.forEach(line => readableStream.push(line));
          readableStream.destroy();
       });
    });
}

未检查,如果有问题,请进行注释。

如何读取流的前两行,然后将阵列作为可读流传输到csv

试试这个:

const lineReader = require('readline');
const Stream = require('stream')

function getHeaders(dataStream) {
    return new Promise((resolve, reject) => {
       let wantedLines = [];
       lineReader.createInterface({
         input: dataStream
       });
       lineReader.on('line', (line) => {
         if(wantedLines.length >= 2) {
           lineReader.close();
         }
       });
       lineReader.on('close', () => {
          let resolved = false;
          const readableStream = new Stream.Readable();
          readableStream
            .pipe(csv())
            .on('headers', (headers) => {
              if (!resolved) resolved = true;
              resolve(headers);
            })
            .on('error', reject);
            .on('close', () => {
              if (!resolved) resolve([]);
            });
          wantedLines.forEach(line => readableStream.push(line));
          readableStream.destroy();
       });
    });
}
没有检查,如果有问题,请评论