Node.js vm2 для обмена информацией между ВМ и основным кодом с использованием функций - PullRequest
0 голосов
/ 16 декабря 2018

Я использую модуль vm2, и у меня есть код с двумя функциями: get_input() для получения некоторых данных, которые у меня есть, и display() для отображения некоторых данных, но эти функции не будут определены в этомкод.Как мне создать какую-то внешнюю функцию, которая может запускать get_input() для выдачи данных из массива и вывода некоторых данных в мой основной код с помощью функции display()?В основном я хочу сделать это:

  • Код, выполняющийся в vm2, делает get_input() вызов
  • Данные из массива отправляются в эту функцию
  • Данные оцениваютсяс кодом в экземпляре vm2
  • код vm2 делает вызов display(), который выводит данные в другой массив моего основного кода

Любая помощь будет принята.

1 Ответ

0 голосов
/ 16 декабря 2018

Опция 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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...