@BalgabayevD
Начинающий front-end программист

Как обработать запрос в Rest api?

Задача приложения в том: что с клиента приходят архивы с файлами. Структура архивов различная. А на выходе должен получится один архив со всеми файлами.
Вот пример кода:
const fileList = req.files.file;

    
        function moveToTemp() {
            if (fileList.length > 1) {
               fileList.forEach(file => {
                    file.mv(path.join(__dirname, '..', 'dist', 'tmp', file.name), err => {
                        if (err) {
                            console.log(err);
                            return res.status(500).send(err);
                        }
                    });
                });
            }
            if(fileList.name){
                console.log('single file')
            }
        }
        await moveToTemp();

        function unPack (){
            fs.readdir(path.join(__dirname, '..', 'dist', 'tmp'), (err, files) => {
                if(err){
                    console.log(err);
                }
                files.forEach((value => {
                    if(value.slice(-3) === 'rar'){
                        unrar(path.join(__dirname, '..', 'dist', 'tmp', value), path.join(__dirname, '..', 'dist', 'tmp'), {override: true});
                    }
                }));
            })
        };
        await unPack();

        function unlink() {
            fs.readdir(path.join(__dirname, '..', 'dist', 'tmp'), (err, files) => {
                if(err){
                    console.log(err);
                }
                files.forEach((value => {
                    if(value.slice(-3) === 'rar'){
                        fs.unlink(path.join(__dirname, '..', 'dist', 'tmp', value), (err) => {
                            if (err) console.log(err);
                        });
                    }
                }));
            })
        }
        await unlink();

        function contain(){
            fs.readdir(path.join(__dirname, '..', 'dist', 'tmp'), (err, files) => {
                if(err){
                    console.log(err);
                }
                files.forEach((value => {
                    if(fs.lstatSync(path.join(__dirname, '..', 'dist', 'tmp', value)).isDirectory()){
                        fs.readdir(path.join(__dirname, '..', 'dist', 'tmp', value), (err, files) => {
                            if(err){
                                console.log(err);
                            }

                            files.forEach((value => {
                                value.mv(path.join(__dirname, '..', 'dist', 'tmp', value), err => {
                                    if (err) {
                                        console.log(err);
                                    }
                                });
                            }));
                        });
                        fs.unlink(path.join(__dirname, '..', 'dist', 'tmp', value), (err) => {
                            if (err) console.log(err);
                        });
                    }
                }));
            })
        }
        function lookForFolders () {
            const list = fs.readdirSync(path.join(__dirname, '..', 'dist', 'temp'));
            console.log(list);
             fs.readdirSync(path.join(__dirname, '..', 'dist', 'temp'), (err, files) => {
       
             if(err){
              console.log(err);
                 }
          if(files){
                    files.forEach(file => {
                       do {
                  contain();
                      } while (
                         fs.lstatSync(path.join(__dirname, '..', 'dist', 'tmp', file)).isDirectory()
                        )
                  });
                }
         })
        };
        await lookForFolders();

Дальше все собирается в архив.

Порядок работы был такой: принять фаллы => положить в папку => если в ней есть ''rar'' , распоковать => если есть папки, войти в каждую и переместить оттуда файлы в общу папку ''tmp'' => проверять если ли еще папки и повторять предыдущю функцию пока все вайлы не будут извелечны => собрать все файлы в архив.

Но проблема в том что, действие проверять если ли еще папки и повторять предыдущю функцию пока все вайлы не будут извелечны он начинает делать раньше чем архив распоковался. Делал все синхронно затем асинхронно, все равно не выходит.
  • Вопрос задан
  • 65 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы