我知道将缓冲区转换为 json 对象很简单:
JSON.parse(buffer)
但是如何将包含带有函数的 javascript 对象的缓冲区转换为真正的 javascript 对象呢?
我有一些文件与函数联系对象,我需要读取这些文件并将它们保存到另一个主对象。
虽然读取文件的任务不是问题,但我找不到任何方法将缓冲区再次转换回真正的 JavaScript 对象。
这是我尝试加载的文件“test.js”的一个非常简单的示例
{
get:function(){return 'hello'},
somevar: "xxx",
put: function(){return 'world'}
}
读取其中的数据是一个缓冲区,我无法使用 JSON 进行转换,因为它包含函数,并且我无法使用 utf8 编码读取,因为它将变成字符串!
var funcs = {}
fs.readFile('test.js',function(err,buff){
funcs['test'] = buff;
})
是否可以读取文件并将其转换为真正的 JavaScript 对象?
编辑
好的,我找到了一个解决方案,但它使用了可怕的 eval(),但是这是后端代码,据我所知,用户无法从前端注入(inject)任何内容,我更喜欢不要使用它,但除非有任何东西可以在不修改文件格式的情况下工作,否则我会使用它:
var funcs = {}
fs.readFile('test.js','utf8',function(err,buff){
eval('var_='+buff);
funcs['test'] = _;
})
最佳答案
对于它的值(value),你可以使用 the Function
constructor 。它比 eval 稍微安全一些,因为它不访问本地范围。但它仍然可以访问全局变量。
var script = buffer.toString('utf8'); // assuming the file is in UTF-8
var returnObject = new Function('return ' + script);
var myObject = returnObject();
关于javascript - 将 NodeJS 缓冲区转换为具有函数的 JavaScript 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48606358/