从模块返回流以表达路线

时间:2019-02-12 20:51:15

标签: node.js express fs

我正在对磁盘上的文件执行不同的操作,例如解密和解压缩。我想将此流作为响应发送到我的主模块中。

server.js

app.get('/route', function(req, res) {
  let req_params = req.query;
  cryptProvider.decrypt({file: req_params.file, key: req_params.key}).pipe(res);
})

cryptProvider.js

exports.decrypt = function ({ file, key }) {
  const readInitVect = fs.createReadStream(file, { end: 15 });

  let initVect;
  readInitVect.on('data', chunk => {
    initVect = chunk;
  });

  readInitVect.on('close', () => {
    const cipherKey = crypto
      .createHash('sha256')
      .update(key)
      .digest();
    const readStream = fs.createReadStream(file, { start: 16 });
    const decipher = crypto.createDecipheriv('aes256', cipherKey, initVect);
    const unzip = zlib.createUnzip();

    return readStream
      .pipe(decipher)
      .pipe(unzip);

  })
};

因此,我试图将readStream从我的cryptProvider传递到server.js。返回readStream并将其通过管道传递到res似乎不起作用,因为cryptProvider.decrypt不支持进一步的管道传递。

如果有人可以帮助我弄清楚这里出了什么问题,我会很高兴。

0 个答案:

没有答案