使用封闭功能将Eval转换为节点的VM模块

时间:2016-05-20 12:12:52

标签: node.js virtual-machine eval sandbox loopbackjs

我们使用Loopback作为REST端点,并有一个端点从数据库中提取JavaScript,然后使用eval在Node实例中的服务器上加载和执行特定功能。我们希望转换为Node的VM功能,但遇到了问题。具体如何:

  1. 在'命名空间'
  2. 中加载具有多个功能的代码
  3. 执行其中一个功能
  4. 允许注入的函数访问导入的模块
  5. 然后从该函数返回结果。
  6. ' eval'基于代码运行良好但似乎已停止使用最新的Node。因此,我们正利用这个机会转换为Node' vm'沙盒。但是,我们在调用嵌入在命名空间中的函数时遇到了麻烦。

    view B

1 个答案:

答案 0 :(得分:1)

我相信这应该能满足你的需求:

// ********************************
// NEW VERSION ATTEMPTING TO USE 'vm' SANDBOXING.
// ********************************
var Query = require("query");
var vm = require("vm");

export function executeDynamicScriptOnServer(javaScript, callback) {
  javaScript += 'onQuery(done)'
  // Load the module with the dyanamic script.
  vm.runInNewContext(javaScript, vm.createContext({
    Query: Query.Query,
    done: function(returnData) {
      // do stuff with the result
      callback(returnData)
    }
  }));
}