无论文件是否存在,如何确保路径是可读写的?的NodeJS

时间:2016-07-13 04:01:35

标签: node.js permissions fs

我的用例是我已经获得了配置文件的目录,该目录可能已经存在,也可能不存在。如果它已经存在我想阅读它,如果不存在我想写一些默认值,可以在将来通过该文件进行用户配置。

如果我没有权限读取和写入该路径上的文件(无论文件是否已存在),我想报告该错误,以便更正。

1 个答案:

答案 0 :(得分:2)

这绝对可以使用一些重构,但似乎是一种可行的方法。我怀疑有一种更简单的方法。仍希望其他人能给出更好的答案。

function canReadAndWrite(targetPath) {
  return new Promise((resolve, reject) => {
    fs.stat(targetPath, (err) => {
      if (err) { reject(err); return; }
      fs.access(targetPath, fs.W_OK | fs.R_OK, (err) => {
        if (err) {
          const dir = path.dirname(targetPath);
          fs.access(dir, fs.W_OK | fs.R_OK, (err) => {
            if (err) { reject(err); return; }
            resolve(false);
          });
        }

        resolve(true);
      })
    }
  });
}

可以像:

一样使用
canReadAndWrite('/var/lib/test/config.json').then((exists) => {
    if (exists) {
        // safely read file
    } else {
        // safely write file
    }
}).catch((error) => {
    console.log('nope');
});