今天在查文档时偶然看到fs.exists不被提倡使用,挺意外的,或许是因为以前没有认真看过文档。在很多程序里都见到在打开路径前先使用fs.exists检查文件是否存在,但没想到这个方法不被提倡使用了。
看了下官方文档中所述的原因
Note that the parameter to this callback is not consistent with other Node.js callbacks. Normally, the first parameter to a Node.js callback is an err parameter, optionally followed by other parameters. The
fs.exists()callback has only one boolean parameter. This is one reasonfs.access()is recommended instead offs.exists().Using
fs.exists()to check for the existence of a file before callingfs.open(),fs.readFile()orfs.writeFile()is not recommended. Doing so introduces a race condition, since other processes may change the file's state between the two calls. Instead, user code should open/read/write the file directly and handle the error raised if the file does not exist.
第一段说,fs.exists()的回调参数只有一个参数,并且这个参数是个boolean类型,用于判断文件是否存在。然而Node.js中其他回调函数中第一个参数通常是error,并且后面经常跟着一些可选参数,这就很刺激了。
第二段说,在调用fs.exists()检查文件是否存在,与调用fs.open()之类的方法对这个文件进行操作,这两个操作之间的这段时间程序很可能会改变文件。因此应该推荐用户直接对文件进行操作,再添加个处理错误的事件就好了。
而如果你仅仅是要检查该文件是否存在,而不对其进行操作,可以使用fs.access()。











网友评论