Как правильно «передать» двоичные данные для шифрования (шифрования) сжатия и записи в файл? используя чистый Node.js - PullRequest
1 голос
/ 07 апреля 2020

Я хочу зашифровать данные, прочитанные из файла, который отправляется с помощью cipheriv, а затем сжимать с помощью gzipstrem и записывать в поток файлов. но когда я пытаюсь это сделать, я получаю сообщение об ошибке

stream.on is not a function
    at destroyer (internal/streams/pipeline.js:27:10)
    at internal/streams/pipeline.js:79:12
    at Array.map (<anonymous>)
    at pipeline (internal/streams/pipeline.js:76:28)
    at Promise (internal/util.js:274:30)
    at new Promise (<anonymous>)
    at pipeline (internal/util.js:273:12)
        on line of pipeLinePromisified.

Может кто-нибудь объяснить, что здесь не так? *


const fs = require("fs");
const util = require("util");
const { pipeline } = require("stream");

const writeStreamPromisified = util.promisify(fs.createWriteStream);

function someFunction(req) {
    //extract bnary data req.on('data')
    req.on('end', async () => {
        let fileName = 'something.gz';

        //define streams and cipher with the secret key

        const iv = crypto.randomBytes(16);
        const secret = req.headers["secret"];
        const cipher = crypto.createCipheriv(
            config.algorithmToEncrypt,
            secret,
            iv
        );
        const compressStream = zlib.createGzip();
        let writeStream = fs.createWriteStream(
            `${config.uploadFolder}/${fileName}.gz`
        );

        try {


            //trying to pipe result which is binary data to cipher to be encrypted

            // then compres it using gzipstream and finally write in writestream
            req.body = result; // result is binary data
            await pipeLinePromisified(
                req,
                cipher,
                compressStream,
                writeStream
            );

            return resolve({
                code: 201,
                payload: {
                    message: "Success!",
                    fileName: `${fileName}.gz`,
                    filePath: `somePath`
                }
            });
        } catch (err) {
            console.log(err);
            return reject({
                code: 400,
                payload: {
                    error: `Error`
                }
            });
        }
    })
}
...