2

这里是 Node 的新手。我正在尝试.tar.xz通过以下代码下载文件并将其解压缩到目录中:

var request = require('request');
var tar = require('tar');
var xz = require('xz');

function downloadRaw(url, callback)
{
    return request({
        encoding: null,
        url: url
    }, callback);
}

function extractToDirectory(url, directory, callback)
{
    return downloadRaw(url)
        .pipe(new xz.Decompressor())
        .pipe(tar.Extract(directory))
        .on('finish', callback);
}

出于某种原因,'finish'tar 流上的事件似乎没有被触发,即使它完成了对存档内容的提取。tar是一个由 npm 自己维护的库,所以我假设我在这里犯了某种错误。无论如何,为什么会发生这种情况,我该怎么做才能解决它?

4

2 回答 2

0

我看到 downloadRaw 需要一个回调,但你从来没有传递它,所以你将一个未定义的值传递给请求函数。

如果您想使用流 api,则不要将回调传递给这些函数中的任何一个。

事实上,为什么要打扰那个原始功能。为什么不这样做:

return request(url)
.pipe(newxz.Decompressor())
.pipe(tar.Extract(directory))
 .on('finish', callback);
于 2016-01-24T21:48:20.947 回答
0

原来error事件正在触发,但不是finish. 这修复了它:

function extractToDirectory(url, directory, callback)
{
    return downloadRaw(url)
        .pipe(new xz.Decompressor())
        .pipe(tar.Extract(directory))
        .on('error', callback)
        .on('finish', callback);
}
于 2016-02-08T23:13:54.557 回答