Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.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 从节点js导出CSV而不崩溃_Node.js_Export To Csv_Nodejs Stream_Json2csv - Fatal编程技术网

Node.js 从节点js导出CSV而不崩溃

Node.js 从节点js导出CSV而不崩溃,node.js,export-to-csv,nodejs-stream,json2csv,Node.js,Export To Csv,Nodejs Stream,Json2csv,我需要导出大量数据的CSV,就像它有10万行一样,我正在使用,但有时需要很长时间并崩溃。我正在使用node js stream,但没有任何用处。我在谷歌上搜索,但我不知道如何清除它。请任何人都可以指导我如何修复它 节点JS var formatedData = {......} //object with data let filename = 'test' + '.csv'; let pathName = await writeToCSV(filename, formatedData, f

我需要导出大量数据的CSV,就像它有10万行一样,我正在使用,但有时需要很长时间并崩溃。我正在使用node js stream,但没有任何用处。我在谷歌上搜索,但我不知道如何清除它。请任何人都可以指导我如何修复它

节点JS

var formatedData = {......} //object with data

let filename = 'test' + '.csv';

let pathName = await writeToCSV(filename, formatedData, fields);

let readStream = fs.createReadStream(pathName);

res.setHeader('Content-disposition', `attachment; filename=${filename}`);
res.set('Content-Type', 'text/csv');

let downloadStream = readStream.pipe(res);

    fields = null;
    formatedData = null;
    downloadStream.on('finish', function() {
    fs.unlink(pathName, function() {});
        downloadStream = null;
        readStream = null;
});
writeToCSV

  function writeToCSV(filename, data, fields, option) {

    return new Promise((resolve, reject) => {

        if (typeof data !== 'object') {
            return reject(new Error('Data is not an object'));
        }

        let options = {
            fields
        };

        if (typeof option === 'object') {
            for (let key in option) {
                options[key] = option[key];
            }
        }

        let tmpPath = path.join(__dirname, '..', tmp);
        let pathFile = tmpPath + filename;

        return Promise.all([Promise.resolve(json2csv(data, options).split('\n')), checkTMPExist(tmpPath)]).then(data => {

            let csvFormat = data[0];

            let writeStream = fs.createWriteStream(pathFile);

            csvFormat.forEach((lines, index) => {
                if (index === csvFormat.length - 1) {
                    writeStream.end(lines + '\n');
                } else {
                    writeStream.write(lines + '\n');
                }
            });

            writeStream.on('finish', function() {
                this.end();
                return resolve(pathFile);
            });

            writeStream.on('error', function(err) {
                this.end();
                fs.unlink(pathFile, () => {});
                return reject(err);
            });

        }).catch(err => {
            fs.unlink(pathFile, () => {});
            return reject(err);
        });

    });
}
前端Ajax调用

function export_csv(url, fileName) {
    $.ajax({
        url: url,
        type: "GET",
        success: function (result) {
            var encodedUri = 'data:application/csv;charset=utf-8,' + encodeURIComponent(result);
            var link = document.createElement("a");
            link.setAttribute("href", encodedUri);
            link.setAttribute("download", fileName);
            document.body.appendChild(link);
            link.click();
        },
        error: function (xhr) {
            console.log("Export csv have some issue:" + JSON.stringify(xhr));
        }
    });
}