11

JSON 确实很难用于本地配置文件,因为它不支持注释或函数,并且需要非常冗长的语法(逗号,总是"用于键)。使其非常容易出错,或者在需要功能的情况下无法使用。

现在我知道我可以这样做:

require('coffee-script')
config = require('config.coffee')

但是,这需要我在module.exports = {the data}里面做config.coffee不太理想的事情。甚至允许诸如require暴露之类的东西,如果我们不信任它们,可能会使配置文件不安全。

有没有人找到一种方法来读取咖啡脚本配置文件,但要保证它们的安全?

4

1 回答 1

14

sandbox事实证明,CoffeeScript 通过将参数设置为true通过调用来支持内置的安全部分eval。例如

# Prepare
fsUtil = require('fs')
coffee = require('coffee-script')

# Read
dataStr = fsUtil.readFileSync('path').toString()
data = coffee.eval(dataStr, {sandbox:true})

上面的代码将读入文件数据,然后在沙盒模式下使用咖啡脚本对其进行评估。

我为此创建了一个很好的包装器,称为CSON ,它通过 require支持coffee和文件,通过上述机制支持文件,通过典型机制支持文件- 以及将值字符串化回咖啡脚本符号。使用它,以下 API 被公开:jscsonjsonJSON.parse

# Include CSON
CSON = require('cson')

# Parse a file path
CSON.parseFile 'data.cson', (err,obj) ->  # async
result = CSON.parseFile('data.cson')  # sync

# Parse a string
CSON.parse src, (err,obj) ->  # async
result = CSON.parseSync(src)  # sync

# Stringify an object to CSON
CSON.stringify data, (err,str) ->  # async
result = CSON.stringifySync(obj)  # sync
于 2012-08-19T03:36:28.990 回答