我试图在linux + node.js中使用沙盒模块运行不受信任的javascript代码,但它已经坏了,我只需要让用户编写打印出一些文本的javascript程序.不允许其他i/o,只使用普通的javascript,没有其他节点模块.如果不是真的可以这样做,你建议用什么其他语言来完成这项任务?我需要的最小特征集是一些数学,正则表达式,字符串操作和基本的JSON函数.脚本将运行让我们说5秒钟顶部,然后该过程将被杀死,我怎么能实现这一点?
本domain内置模块 将被弃用:
稳定性:0 - 不推荐使用
此模块正在等待弃用.更新API完成后,将完全弃用此模块.大多数最终用户不应该有使用此模块的原因.绝对必须具有域提供的功能的用户可能暂时依赖它,但是应该期望将来必须迁移到不同的解决方案.
据此,他们目前并不真正推荐解决方案.但是如何实现类似于下面的功能:
var d = require('domain').create();
d.on('error', function(err) {
console.log(err);
});
d.run(function() {
setTimeout(function () {
throw new Error("Something went really wrong in async code.");
}, 1000);
});
Run Code Online (Sandbox Code Playgroud)
因此,这会处理从异步内容中抛出的错误,但domain不推荐使用该模块.
如何将此代码迁移到更好的位置?
我的用例是我正在编写一个接受函数作为输入的库,它运行该函数并显示结果(实际上,您可以将其视为单元测试库):
myLib.it("should do something", function (done) {
setTimeout(function () {
// Some async code
// ...
// But here an error is thrown
throw new Error("dummy");
}, 1000);
});
Run Code Online (Sandbox Code Playgroud)
显然,我不想在这种情况下崩溃进程,但我确实希望显示一个很好的错误(所以基本上捕获此函数中的错误).
目前在图书馆我做:
var err = null;
try {
fn(callback);
} …Run Code Online (Sandbox Code Playgroud) 我在我的页面上使用ACE Editor作为我的文本编辑器,用户将输入代码.
我希望执行用户在浏览器上或浏览器中输入的代码.如何从编辑器获取输入并使用Browsers V8 JavaScript编译器?
然后我将尝试在Node.js上运行它,但首先我必须学习Node :).