2017-09-13 67 views
0

我希望允许我的站点(我的同事)的用户在Node.js服务器上创建和运行任意函数。该功能可以上传到服务器,在那里存储它,当某人访问该服务器上的URL时,它应该执行该功能。该功能无需在沙箱中检查或执行,代码应视为可信。我怎样才能实现这样的事情?我知道这是非常接近FaaS,但我不认为这是相同的......我还需要在服务器上请求运行一些预处理等在Node.js服务器中创建和运行动态功能

回答

1

如果你真正了解的一切后果,您可以使用表格eval函数在服务器上运行以文本/字符串形式存储的代码。

请看这里 - https://nodejs.org/api/vm.html,例如,像指定的有:

实施例:一个VM

内运行的HTTP服务器当使用任一script.runInThisContext()vm.runInThisContext(),代码的当前全球V8上下文中执行。传递给此VM上下文的代码将具有其自己的隔离范围。

为了使用http模块运行简单的Web服务器,传递给上下文的代码必须自己调用require('http'),或者引用传递给它的http模块。例如:

'use strict'; 
const vm = require('vm'); 

const code = ` 
(function(require) { 
    const http = require('http'); 

    http.createServer((request, response) => { 
    response.writeHead(200, { 'Content-Type': 'text/plain' }); 
    response.end('Hello World\\n'); 
    }).listen(8124); 

    console.log('Server running at http://127.0.0.1:8124/'); 
})`; 

vm.runInThisContext(code)(require); 

注意:在上述情况下的require()股与它从传递的上下文的状态。这可能会在不可信代码执行时带来风险,例如以不需要的方式改变上下文中的对象。

+0

感谢VM模块(我完全错过了!)和代码示例! –