首页 > 解决方案 > 读取提取数据javascript

问题描述

我正在开发一个节点 js 项目。我有一个要提取的 zip 文件,然后我读取了提取的 zip 中的一个文件。我遇到的问题是,即使我在回调中调用它的 readfile 函数之前对提取函数进行了编码。我总是没有这样的文件或目录错误,例如在提取之前传递了读取文件。帮助!

这是我的代码

var unzip = require('unzip');
const fs = require('fs');
var stream =  fs.createReadStream(zipFilePath).pipe(unzip.Extract({ path: 'files/em' }));
stream.on('finish', function () {
  fs.readFileSync('files/em/data.json') ;//read the extracted file but always the extraction passed after this
});

标签: javascriptnode.jsfs

解决方案


你没有观察到正确的事件。在解压缩过程发生之前触发的'finish'事件。createReadStream()相反,您应该听'close'解压缩过程的事件以确保提取完成。

const unzip = require('unzip');
const fs = require('fs');

const zipFilePath = 'files/data.zip'

let extract = unzip.Extract({ path: 'files/em' })
let stream = fs.createReadStream(zipFilePath).pipe(extract);

extract.on('close', () => {
  let data = fs.readFileSync('files/em/data.json') ;
  console.log(data.toString())  // print your unziped json file
})

推荐阅读