在Node.js服务器中创建和运行动态功能
问题描述:
我希望允许我的站点(我的同事)的用户在Node.js服务器上创建和运行任意函数。该功能可以上传到服务器,在那里存储它,当某人访问该服务器上的URL时,它应该执行该功能。该功能无需在沙箱中检查或执行,代码应视为可信。我怎样才能实现这样的事情?我知道这是非常接近FaaS,但我不认为这是相同的......我还需要在服务器上请求运行一些预处理等在Node.js服务器中创建和运行动态功能
答
如果你真正了解的一切后果,您可以使用表格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()
股与它从传递的上下文的状态。这可能会在不可信代码执行时带来风险,例如以不需要的方式改变上下文中的对象。
感谢VM模块(我完全错过了!)和代码示例! –