首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Ajax-1-学习Ajax的契机-问题:判断目录和文件是否存在

在《Ajax-1-学习Ajax的契机》中,我用nodejs来把自己需要的内容写入到本地的文件中。那里用到了fs模块的writeFile方法,实现了就算文件存在也能重新写入的需要。

然后我希望能够每次生成的文件放在不同文件夹中。(这里我会自己给出文件夹的名字)这时候就遇到了一个问题,如何去判断文件夹是否存在?

我查看了fs模块以及百度了很多方法。描述如下:

1.fs.exists(),看名字我当时觉得这是最适合的方法。但其实它已经废弃了。故不建议使用。

2.fs.stat(),这个方法的回调函数中会有一个参数stats,它可通过stats.isDirectory来判断是不是根目录。大家说可以这么来判断文件是不是存在。然后我尝试了一下。使用了这个方法来判断一个本地还不存在的根目录。

运行后的结果如上图。也就是说,一个本地不存在的目录使得回调函数中的参数stats为undefined,然后用stats.isDirectory()会报错。

3.fs.access(),此方法不建议在fs.open,fs.readFile,fs.writeFile之前使用来检查一个文件的可访问性。

解决方法

方法一:

使用fs.access()。也许会疑惑说不是不建议在fs.writeFile前使用access吗?但这里应该是针对同一个文件而已。而我这里是判断目录是否存在。

方法二:

针对方法一,可以看到我对错误的处理。如果报错,我就默认为目录不存在。但可能错误还有别的。所以这边做一个小更改

在写代码时,我一直会纠结在一个地方,主要原因在于不能很熟练地使用回调函数。我的逻辑一直是这样的,如果目录存在怎么怎么样,如果目录不存在怎么怎么样。回调函数可以说是完成了前面半句话的实现。那么后面半句话怎么实现就是我们需要思考的。所以这边就需要考虑在回调函数中的第一个error的用处!在刚写代码的时候,遇到error时,大家都会这么写     if(err) ,这就给人一种报错终止的感觉。(我一度这么觉得)但其实并不是,这个error只是没满足这个API而产生的error,并不是程序的error,最重要的是这是一个我们需要的error。它是起到if else里面else的关键。

方法三:

(这个方法我在写上面的fs.stat时突然间想通)之前有说回调函数里面的stats都是undefine的,怎么用isDirectory来判断(网上很多人都建议这个方法,但也可能是时间太久,node的API有所改变的原因)。那么既然目录不存在时,stats是undefine的,是否可以用stats来判断呢?

经过验证,这种方法是可以成功的。

其实上面讲述的就两种方法。第一第二种方法提醒我们要对nodejs的error有一个比较全面的了解,这样才能有一个更好的判断。

上面的方法是不是好的方法,我也不清楚。让我选择的话,我觉得方法二可能最安全一些,因为方法三我也不能确定引起stats为undefined的就是目录不存在这种情况(感觉好无知啊。)如果有更好的方法,希望大家能一起分享。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180518G0HAP800?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券