2017-10-13 9 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); 

しかし、あなたの依存関係のどちらもそのような構文をサポートしていないことがわかります。

関連する問題