判断路径是否存在(Node.js)

阅读 1.3k
标签: Node.js

用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

评论(0条)

(必填)
复制成功