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
)