Javascript Node.JS在REST服务中运行沙盒

Javascript Node.JS在REST服务中运行沙盒,javascript,node.js,rest,sandbox,restify,Javascript,Node.js,Rest,Sandbox,Restify,我正在使用Node Restify模块创建一个接受POST的REST服务。在服务中,我尝试使用节点沙盒模块创建沙盒进程,因为我们将运行动态插入的Javascript,如果出现问题,我不希望它影响主节点实例 当我尝试创建沙箱时,出现了一些问题,导致REST服务返回空 这是我的密码 var restify = require('restify'); var Sandbox = require("sandbox"); var logic; function createSandbox(bod

我正在使用Node Restify模块创建一个接受POST的REST服务。在服务中,我尝试使用节点沙盒模块创建沙盒进程,因为我们将运行动态插入的Javascript,如果出现问题,我不希望它影响主节点实例

当我尝试创建沙箱时,出现了一些问题,导致REST服务返回空

这是我的密码

    var restify = require('restify');
var Sandbox = require("sandbox");
var logic;

function createSandbox(body) {
    var s = new Sandbox();
    s.run("1 + 1", function(output) {
        logic = body.names + " has " + output.result;
    });
}

function respond(req, res, next) {
    createSandbox(req.body);
    res.send(logic);
}
var server = restify.createServer();
server.use(restify.bodyParser({
    mapParams: false
}));
server.post('/hello/:name', respond);
server.head('/hello/:name', respond);

server.listen(8080, function() {
    console.log('%s listening at %s', server.name, server.url);
});
在我的http请求中,我在正文中有
{“name”:“rob”}

我期待着以下回应

rob has 2
------------更新------------------- 这很有效

var restify = require('restify');
var Sandbox = require("sandbox");
var logic;

function respond(req, res, next) {
   var s = new Sandbox();
    s.run("1 + 1", function(output) {
        logic = req.body.names + " has " + output.result;
        res.send(logic);
    });  
}
var server = restify.createServer();
server.use(restify.bodyParser({
    mapParams: false
}));
server.post('/run/:id', respond);
server.head('/run/:id', respond);

server.listen(8080, function() {
    console.log('%s listening at %s', server.name, server.url);
});
Sandbox.run()
是异步的。它只是将沙盒设置为稍后运行,并在沙盒中的代码实际运行之前立即返回,因此您在设置之前阅读
logic

快速演示

var Sandbox = require("sandbox");

function createSandbox() {
    var s = new Sandbox();
    s.run("1 + 1", function(output) {
        console.log("inside");
    });
}

createSandbox();
console.log("outside");

> outside
> inside