【问题标题】:Node.JS run Sandbox in REST serviceNode.JS 在 REST 服务中运行沙箱
【发布时间】:2013-05-27 02:47:03
【问题描述】:

我正在使用 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 请求中,我的正文中有 {"names":"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);
});

【问题讨论】:

    标签: javascript node.js rest sandbox restify


    【解决方案1】:

    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
    

    【讨论】:

      猜你喜欢
      • 2015-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多