求解fs.existSync方法不准确,怎么办?
发布于 7 年前 作者 Ang-Work 4233 次浏览 来自 问答

今天在写个上传的时候遇到了的问题,用了formidable中间件,这个东西不像multer那样可以自动创建文件夹,所以就想自己写个方法判断一下文件夹是否存在,不存在的话就创建一个。

问题就此出现,先上运行截图: 屏幕快照 2017-05-29 下午8.27.21.png

截图中可以看到fs.existSync将不存在的目录路径返回了true,期间也尝试了一下用其他方法(比如fs.accessSync,不存在的路径不会抛异常)都不行。。我开始怀疑人生了,是不是我哪里写错了?现在比较懵逼看不出来。。。下面是我的代码:

function mkdirsSync(dirpath) { 
    if (!fs.existsSync(dirpath)) {
        let pathtmp = '';
        dirpath.split(path.sep).forEach(function(dirname) {
            pathtmp = pathtmp ? path.join(pathtmp, dirname) : dirname;
            if(!pathtmp) {
                return;
            }
            console.log(pathtmp);
            if(!fs.existsSync(pathtmp)) {
                try {
                    fs.mkdirSync(pathtmp);
                } catch (err) {
                    console.log(err);
                }
            } else {
                console.log('Exist path %s', pathtmp);
            }
        });
    }
    return true; 
}

mkdirsSync('Users/nuxio/workspace/express-blog-api/server/public/upload/blog_imgs');

SOS~~~~~~

7 回复

这是这么用的: 屏幕快照 2017-05-30 23.04.30.png 感觉没毛病

@blackmatch 可能是这个方法在linux下的bug吧。。。我在windows上运行都没问题,在mac上有问题。。提交到travis-ci上运行测试也不通过,╮(╯▽╰)╭

@i5ting 艾特一下大佬,求助这种情况应该怎么办

@Ang-Work mkdirsSync(‘Users/nuxio/workspace/express-blog-api/server/public/upload/blog_imgs’); 这行的路径最前面加一个/试试

@Ang-Work 我是在Mac上运行的

@Fov6363 你指出了关键。。。感谢_(:зゝ∠)_

直接创建文件或文件夹,然后捕获错误来处理

回到顶部