判断路径是否存在(Node.js)
阅读 1.3k
用Node开发后端应用时,常常需要判断某个路径是否存在,这个问题似乎很简单,比如,用如下的代码来进行判断:
const { existsSync } = require('fs')
if (existsSync('/etc/passwd')) {
console.log('The path exists.')
}
但这样的判断方式,有没有问题呢?
如果只是简单的脚本,那没啥问题,但在实际的后端接口开发中,需要额外注意,因为这是同步
的代码,同步方式会带来性能上
的问题,具体原因请参阅《Don't Block the Event Loop》。所以,我们需要采用异步
的方式,通过查阅API,发现了access()这个方法,但如果直接使用这个方法,发现特别不方便,因此,需要对其做一个简单的封装:
const { access } = require('fs/promises')
const pathExists = async pathUrl => {
let isExist = true
try {
await access(pathUrl)
} catch {
isExist = false
}
return isExist
}
这种封装方式,参照了fs-extra
这个npm包,这样,在使用时就方便多了。
const isExist = await pathExists('/etc/passwd')
if (isExist) {
// doSomething
}
有时,我们可能会对Node.js提供的API方法有一些误解。比如,这个access()方法,如果直接使用,就会觉得这种设计太难用,反人类,但这其实是Node.js的一种设计理念,它提供尽可能小的、原始的方法,能够让API保持简洁,当有需要的时候,再根据需要将其封装成“更高级”的方法来使用。这就像积木一样,它提供了积木和一些原材料,具体需要做成什么,就看你自己的了。
最后编辑于: 2022-04-14