Node.js vm2使用功能在VM和主要代码之间交换信息

时间:2018-12-16 07:08:02

标签: node.js node-vm2

我正在使用vm2模块,并且我有一些带有两个功能的代码:get_input()用于获取我拥有的一些数据,display()用于显示一些数据,但是这些功能不会在该代码中定义。如何制作某种外部函数来运行get_input()来从数组中提供数据,并使用display()函数将一些数据输出到我的主代码中?基本上我想这样做:

  • 在vm2中运行的代码会进行get_input()调用
  • 数组中的数据被发送到该函数
  • 使用vm2实例中的代码评估数据
  • vm2代码进行display()调用,该数据将数据输出到我的主代码上的另一个数组

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您传递到sandbox构造函数中的vm2选项表示沙箱实例内部的“全局”对象。您也可以传递函数:

const { VM } = require('vm2');

const sandbox = {
  get_input(data) {
    return 'input:' + data;
  },
  display(data) {
    console.log('Data:', data);
  }
}

const vm = new VM({ sandbox });

vm.run(`

const array = [ 'foo', 'bar', 'blah' ];

const ret = get_input(array[1]);

display(ret);

`);

(输出:Data: input:bar