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

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

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

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

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)

Другие вопросы по тегам