使用 nodejs 提取 zip 文件时未处理的 'error' 事件

Unhandled 'error' event when extracting zip file with nodejs

我想下载一个 zip 文件并用 nodejs 解压。这是我到目前为止所做的:

var fs = require('fs');
var wget = require('wget-improved');
var filesizeHumanReadable = require('filesize');
var unzip = require('unzip');

var downloadCSS = function() {
  var src = 'http://7-zip.org/a/7za920.zip';
  var output = '/tmp/7z.zip';
  var options = {};
  var download = wget.download(src, output, options);
  download.on('error', function(err) {
      console.log(err);
  });
  download.on('start', function(fileSize) {
      console.log(filesizeHumanReadable(fileSize));
  });
  download.on('end', function(outputMessage) {
      console.log(outputMessage);
      console.log(output);
      fs.createReadStream(output).pipe(unzip.Extract({ path: '/tmp/' }));
  });
  download.on('progress', function(progress) {
      // code to show progress bar
  });
}

我在 运行 时收到的错误消息:

mles-MacBook-Pro:test-api mles$ node index.js 
375.83 KB
Finished writing to disk
/tmp/7z.zip
events.js:85
      throw er; // Unhandled 'error' event
            ^
Error: EPERM, unlink '/tmp'
    at Error (native)

现在我有点困惑如何处理错误事件以及我的实际错误是什么?

进程是否有足够的权限写入/tmp/tmp 是否已经有一些文件?

因为unlink是删除目录的node.js函数。显然,unzip.Extract 调用它。因此,如果文件夹不为空(在您的情况下 /tmp),unlink 将失败。

将解压缩位置设置到特定目录可以修复它

fs.createReadStream(output).pipe(unzip.Extract({ path: '/tmp/7zip' }));

我将 mostruash 的回答标记为正确,因为他让我走上了正确的轨道。