javascript - 将 NodeJS 缓冲区转换为具有函数的 JavaScript 对象

标签 javascript node.js

我知道将缓冲区转换为 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/

相关文章:

javascript - 如何从 IE 和 Chrome 浏览器中的 showmodaldialog 窗口返回数组对象?

javascript - Sequelize - 更新时如何部分验证?

node.js - 将客户端的base64图像数据保存到Nodejs服务器

JavaScript 错误 : "Expected identifier, string or number" in IE

javascript - 如何从属性函数引用上面的对象

javascript - 检测事件标签是 Chrome 扩展中的一个新标签

javascript - 使用 Node JS 获取 API 数据

c - 在 C 中处理已识别的模块

node.js - 为什么在尝试导入时括号 '{' 是意外标记?

Node.js、express 以及在 app.configure 中使用开发与生产