每个事件后创建目录

时间:2015-11-07 13:28:59

标签: javascript node.js file

我正在尝试在每次按钮点击事件后创建一个目录。 这只适用于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个目录。

感谢您的帮助。 马丘比丘

1 个答案:

答案 0 :(得分:2)

问题在于排序

你有目录

  • _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的结果