2016-12-19 3 views
0

Мне нужно автоматизировать некоторые процессы и сначала захватить некоторые файлы в zip, а затем этот почтовый индекс также должен быть заархивирован. Я использую диспетчер узлов, но код, который я написал, не работает.Zip некоторые файлы, а затем zip zip Node js

function zip(name, files, path, callback) { 

    let output = fs.createWriteStream(name + '.zip'), 
     archive = archiver('zip', {store: true}); 

    output.on('close',() => { 
     console.log(archive.pointer() + ' total bytes'); 
     console.log('archiver has been finalized and the output file descriptor has closed.'); 
    }); 

    archive.on('error', err => { 
     throw err; 
    }); 

    archive.pipe(output); 

    if(files.constructor === Array) 
     files.forEach((e, i) => { 
      archive.append(fs.createReadStream(path + e), {name: e}); 
     }); 
    else 
     archive.append(fs.createReadStream(path + files), {name: files}); 

    archive.finalize(); 

    if(callback) { 
     callback(); 
    } 
} 
fs.readFile(widgetPath + widgetFileName + '.manifest', 'utf8', (err, json) => { 

    let jsonData = JSON.parse(json), 
     name = jsonData.name; 

    return zip(name, [fileJS, fileManifest, fileHtml], widgetPath, 
     zip(name, name + '.zip', './')); 

}); 
+1

Определить, что «не работает». –

+0

Почтовый индекс в zip, но я не могу получить файлы во втором zip-файле. –

ответ

0

Вы не правильно обрабатываете параметр обратного вызова из своей возвратной линии.

Попробуйте изменить это:

return zip(name, [fileJS, fileManifest, fileHtml], widgetPath, 
    zip(name, name + '.zip', './')); 

Для этого:

return zip(name, [fileJS, fileManifest, fileHtml], widgetPath, 
    () => zip(name, name + '.zip', './')); 

В первом случае вы звоните внутренний zip вызов, поэтому он может возвращать значение, которое будет передан внешней zip вызова , Поскольку zip ничего не возвращает, это приведет к undefined, поэтому сообщения об ошибках отсутствуют.

 Смежные вопросы

  • Нет связанных вопросов^_^