如何避免使用createWriteStream时出现“Octal literals are not allowed in strict mode”错误

68

我有以下代码

fs.createWriteStream( fileName, {
  flags: 'a',
  encoding: 'utf8',
  mode: 0644
});

我遇到了一个纠错错误。

Octal literals are not allowed in strict mode.

如何正确编写此代码以避免出现Lint错误?

6个回答

72

在使用转义序列时,我遇到了这个问题:

console.log('\033c'); // Clear screen

我只需要将它转换为十六进制

console.log('\x1Bc'); // Clear screen

9
完全符合我的问题!这个解决方案很好用,谢谢! - eisbehr
2
@538ROMEO 33在八进制中等于27,在十进制中为27,在十六进制中为1B。 - ariel

62
您可以像这样编写它们:

 mode     : parseInt('0644',8)

在Node和现代浏览器中(请参见兼容性),您可以使用八进制字面量:

 mode     : 0o644

1
我喜欢这个答案,因为它使用整数类型,这使得像fs.chmod或fs.mkdir这样需要模式整数的东西更好。即使它们“支持”字符串,将期望的数据类型传递给它们是一个好主意。 - Michael

39

我手头没有Node安装,但查看源代码,似乎它们也允许字符串:

  mode     : '0644'

它有效吗?


+1 看起来像是一个有效的解决方案,考虑到源代码(假设它们是正确的来源和版本等)。 - Denys Séguret

4

0

您可以通过将模式转换为字符串类型来避免此问题。

第一种方法

 let mode = "0766";
 fs.createWriteStream( fileName, {
        flags    : 'a',
        encoding : 'utf8',
        mode     : mode
    });

或者

第二种方法

 fs.createWriteStream( fileName, {
        flags    : 'a',
        encoding : 'utf8',
        mode     : "0766"
    });

0

我也遇到了这个问题

function getFirst(arr) {
    return arr[0]
}
let first = getFirst([10, 'hello', 96, 02])
console.log(first)

这是我解决它的方法

function getFirst(arr) {
    return arr[0]
}
let first = getFirst([10, 'hello', 96, '02'])
console.log(first);

显然,除非它是一个字符串,否则它不接受0作为数字的开头


1
这个回答并没有回答到楼主的问题。 - Tyler2P
@Tyler2P 或许不是,但这是我在谷歌搜索错误信息时找到的第一个结果,它帮助我解决了问题。 - Marc Miller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接