如何在 Node.js 中使用 chmod

Posted

技术标签:

【中文标题】如何在 Node.js 中使用 chmod【英文标题】:How do I use chmod with Node.js 【发布时间】:2012-02-04 02:41:07 【问题描述】:

fs里面有个方法,应该可以这样,但是不知道第二个参数取什么。

fs.chmod(路径、模式、[回调])

异步 ​​chmod(2)。除了可能的异常之外,没有为完成回调提供任何参数。

fs.chmodSync(路径,模式)

同步 chmod(2)。

(来自Node.js documentation)

如果我这样做

fs.chmodSync('test', 0755);

什么都没有发生(文件未更改为该模式)。

fs.chmodSync('test', '+x');

也不行。

顺便说一句,我正在使用 Windows 机器。

【问题讨论】:

我觉得windows的权限比较复杂……如果解决不了的话可以去github上开一个issue。 必须同意@thejh 关于这一点... Windows 文件权限要复杂得多。您可能需要执行 cmd.exe 或类似命令。 【参考方案1】:

根据第508行的源代码/lib/fs.js

fs.chmodSync = function(path, mode) 
  return binding.chmod(pathModule._makeLong(path), modeNum(mode));
;

和第 203 行:

function modeNum(m, def) 
  switch (typeof m) 
    case 'number': return m;
    case 'string': return parseInt(m, 8);
    default:
      if (def) 
        return modeNum(def);
       else 
        return undefined;
      
  

它需要一个八进制数或一个字符串。

例如

fs.chmodSync('test', 0755);
fs.chmodSync('test', '755');

在你的情况下它不起作用,因为文件模式只存在于 *nix 机器上。

【讨论】:

对不起,我没有玩过 MSYS,根本不知道它是如何工作的。也许这只是一种模拟(如果我错了,请原谅我)。这篇文章可能会有所帮助:***.com/questions/8682672/… MSYS 似乎忽略了文件模式。【参考方案2】:

指定八进制的正确方法如下:

fs.chmodSync('test', 0o755); 

参考文件模式here。

【讨论】:

以上是关于如何在 Node.js 中使用 chmod的主要内容,如果未能解决你的问题,请参考以下文章

如何使用node.js更改同一文件夹中的所有文件和文件夹权限

如何在 Node.js 中使用 HTTPS

如何使用 Passport.js 在 Node.js 中重置/更改密码?

如何在 Cappuccino 中使用 Node.js?

Node.js:如何在 Sequelize 中使用 Postgres 存储过程?

如何在 node.js 中实际使用 Q Promise?