又回来了另一个乏味的问题。如果我在问题之前解释上下文会更容易。我正在尝试构建一个项目(在 Node.JS 中),它允许您通过“输入”从自身内部进行自我编程(这可能是网络/控制台或任何东西,但让我们假设通过控制台)。
假设我们有一个对象:
var database = {
'test': 123
}
现在从控制台我输入:
;database.myFunc = function() { return database.test; }
我使用它运行它vm.runInContext
,然后将它复制回数据库对象(它需要被沙箱化,因为它是运行它的非特权用户)。这工作正常,代码在下一个命令中执行时工作正常:
;database.myFunc()
=> 123
到目前为止一切都很好。现在,我构建了自己的对象转储器,它可以将函数导出为字符串 ( var str = new String(database.myFunc)
),它可以工作并将它们导出为字符串。
当我从文件中导入代码时会出现此问题。我试过这样的代码:
code = "retval = " + data.toString();
sandbox = vm.createContext({
"database": sb.database
});
result = vm.runInNewContext(code, sandbox);
sb.database = result;
console.log(sb.database.myfunc());
看起来运行的代码只能访问我复制到沙箱中的数据库。这不是我想要的,我希望它访问它在第一次运行时拥有的同一个数据库。关于我如何做到这一点的任何建议?