2013-05-26 3 views
0

Node Restify Module을 사용하여 POST를 허용하는 REST 서비스를 만듭니다. 우리가 동적으로 삽입 된 Javascript를 실행하고 뭔가 잘못 될 경우 노드 샌드 박스 모듈을 사용하여 Sandboxed 프로세스를 만들려고 노력 중입니다. 주 노드 인스턴스에 영향을 미치고 싶지 않습니다.Node.JS REST 서비스에서 Sandbox 실행

샌드 박스를 만들려고 할 때 문제가 발생하여 REST 서비스가 다시 비어있게됩니다.

여기 -------- 내가

나는 다음과 같은 응답

rob has 2 

을 기대하고 몸에 {"names":"rob"}이 내 코드 내 HTTP 요청에서

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); 
}); 

입니다 ---- 업데이트 ------------------- 이 작품은

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); 
}); 

답변

0

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 
+0

빙고! 고맙습니다. – Rob