如果目录在nodejs中可写,最便携的方法是什么?

soy*_*uka 9 node.js

一位朋友问我这个问题,我给了事实上两个选择.

第一种方法,测试文件权限:

//adapted from https://stackoverflow.com/questions/11775884/nodejs-file-permissions#answer-11781404
var fs = require('fs')

function canWrite(directory) {
 var stat = fs.statSync(directory)

 // 2 is the octal value for chmod -w-
 return !!( 2 & (stat.mode & parseInt('777', 8)).toString(8)[0] ) //first char is the owner
}
Run Code Online (Sandbox Code Playgroud)

如果user(process.uid)不是文件系统所有者(stat.uid)也不在它的group(process.gid vs stat.gid)中怎么办?它仍然会获得644权限并且无法写入.

我们怎样才能真正知道(使用nodejs)当前用户属于文件系统组(stat.gid)?容易在bash中,但可移植它会是与一个的NodeJS乱七八糟.

第二种方式,懒惰:

var fs = require('fs')
var canWrite = true

try {
  fs.writeFileSync('./test')
  fs.unlinkSync('./test')
} catch(e) {
  canWrite = false
}

if(canWrite) {
 //go for it
}
Run Code Online (Sandbox Code Playgroud)

懒惰的解决方案,但它应该做的工作.这也可以阻止内核缓冲区.另一方面,fs.Stat通常由操作系统缓存.

这些解决方案都不是完美的.

你会怎么做?有什么我想念的吗?

Mar*_*hii 15

关于什么:

var fs = require('fs');

fs.access(__dirname, fs.constants.W_OK, function(err) {
  if(err){
    console.error("can't write");
    process.exit(1);
  }

  console.log("can write");
  process.exit(0);
});
Run Code Online (Sandbox Code Playgroud)

文档在这里

fs.constants.W_OK:文件可以由调用进程写入.

如果运行上述操作,则sudo可能会根据用户权限获得不同的输出.

  • 抬头说"fs"已被重构 - "W_OK"现在生活在`fs.constants.W_OK`. (3认同)