2017-10-13 11 views
0

나는 JsZip 및 exceljs 패키지를 사용합니다. ExcelJs는 excel doc을 node.js 스트림에 쓸 수 있으며 jszip은 스트림에서 파일을 읽고이를 아카이브에 추가 할 수 있습니다. 그것과의 편리한 작업을 위해 스트림 전송을 어떻게 할 수 있습니까? 나는이 솔루션을하지만, 나는 그것의 나쁜 목발 ...node.js에서 전송 스트림을 만드는 방법은 무엇입니까?

const stream2 = new Writable(); 
    stream2.result = []; 
    stream2._write = function (chunk, enc, next) { 
    this.result.push(chunk); 
    next(); 
}; 

    const stream1 = new Readable(); 
    stream1._read = function() { 
    stream1.push(stream2.result.shift() || null); 
    }; 

    let promise = new Promise((resolve, reject) => { 
    excelDoc.write(stream2).then(() => { 
     zip.file('excelDoc.xlsx', stream1); 
     resolve(true); 
    }); 
    }); 

답변

0

나는 확실히 당신이 뭘하려는 건지하지 않는 생각하지만, 당신이 Duplex Stream 또는 Transform Stream을 개혁하는 것처럼 보인다. 이것들은 읽어 들여 및 기입 해 가능한 스트림입니다.

스트림 출력이 입력에 관련된 어떤 방법으로 어디 이중 스트림입니다 변환, 우리는 당신이 뭘 하려는지에 사용할 수 있습니다 (내 생각) :

const stream = require('stream'); 

const transformStream = new stream.Transform({ 
    transform: (data, encoding, callback) => callback(null, data) 
}); 

let promise = new Promise((resolve, reject) => { 
    excelDoc.write(transformStream).then(() => { 
    zip.file('excelDoc.xlsx', transformStream); 
    resolve(true); 
    }); 
}); 

사이드 노트 : 보통 다음과 같이하면됩니다 :

inputStream.pipe(excelDoc).pipe(zipStream).pipe(outputStream); 

그러나 나는 당신의 의존성이 그러한 구문을 지원하지 않는다는 것을 알고 있습니다.