在每个事件之后创建目录

Creating directory after each event

本文关键字:之后 创建目录 事件      更新时间:2023-09-26

我试图在每个按钮单击事件之后创建一个目录。这只工作到10目录

5612cfea107f9e0f356b3dee_1
5612cfea107f9e0f356b3dee_2
5612cfea107f9e0f356b3dee_3
5612cfea107f9e0f356b3dee_n

然后我得到这个错误:

Error: EEXIST: file already exists, mkdir 'user/public/uploadGallery/5612cfea107f9e0f356b3dee_10'
app.post('/createDirectories', function(req, res) {
    var id = '5612cfea107f9e0f356b3dee';
  var pathDirectory = __dirname + '/public/uploadGallery/' + id;
        fs.readdir(__dirname + '/public/uploadGallery/', function (err, files) { 
        var countVal = files.filter(junk.not).length;
        var fileVal = files.filter(junk.not);
                    if(countVal == '0'){ 
                        fs.mkdirSync(pathDirectory + '_' + 1);  
                        console.log("Directory created: " + pathDirectory + '_' + 1);           
                    }else{
                        var lastElem = fileVal[fileVal.length-1];
                        var lastElemSplitValue = lastElem.split("_")[1];
                        var valInt = parseInt(lastElemSplitValue, 10) +1;
                        fs.mkdirSync(pathDirectory + '_' + valInt);
        }
        });
});

我能做些什么来解决这个问题?我想创建n个目录。

谢谢你的帮助。machu

问题是排序

你会有目录

  • _1
  • _2
  • _9

加上第10个,按照字母词汇的顺序,您将获得

  • _1
  • _10
  • _2
  • _9

所以,最后一个文件夹是_9。。。9+1=10。。。已经存在!

您可以将代码更改为

    } else {
        var valInt = Math.max.apply(null, fileVal.map(function(entry) {
            return parseInt(entry.split("_").pop(), 10);
        })) + 1;
        fs.mkdirSync(pathDirectory + '_' + valInt);
    }

这将Math.max应用于将fileVal条目映射到由"_"分割的每个fileVal条目的最后一部分的parseInt的结果