3

我正在尝试上传 zip 文件,然后我必须在服务器端提取它,而且我必须在提取该 zip 文件时处理错误。提取我正在尝试这样

var zip = new AdmZip(x);

zip.extractAllTo('target path');

extractAllTo 不包含回调函数,如果它包含我可以轻松处理错误,所以让我知道如何在提取 zip 文件时处理错误。

我正在创建一个 tmp 文件夹并在上传文件后将上传的文件保存到 tmp 文件夹中,然后我将上传的文件存储到原始文件夹中,我将采用该路径存储 db(mongodb)。存储数据后我得到了存储导致该回调函数中的回调函数我试图删除该 tmp 文件夹但我无法删除它。如果没有该数据存储的回调函数它正在工作,我已经厌倦了删除。我犯了什么错误。如何解决它。我试过这样

db.save({'filepath':'xxxxx'},function(err,data)
{

     if(data)
     {
        fs.rmdir('xxxx/xxxxx',function(err)
       {
             if(err)
             {
                console.log('err')

             }else 
            {
               console.log('removed');

            } 

       });
     }
});

我总是在控制台中收到那个错误。

4

2 回答 2

3

从 adm-zip 查看代码后,唯一的方法是将提取嵌入到 try {} catch 语句中:

var zip = new AdmZip(x);

try { 
    zip.extractAllTo('target path');
} catch ( e ) { 
    console.log( 'Caught exception: ', e );
}
于 2013-05-14T06:45:18.920 回答
0

看起来您的库是同步的,这就是它不使用回调的原因。如果您将 zip 文件上传到服务器,同步调用将为所有客户端停止整个服务器,因此您应该切换到异步库来完成这项工作。仅供参考,对于同步版本,为了处理错误,您将使用一个try/catch结构,因为抛出的异常位于单个执行堆栈中。

于 2013-05-14T06:46:37.670 回答