在 Node.js 服务器中创建并运行动态函数

riy*_*ali 3 javascript function node.js

我希望允许我的网站的用户(我的同事)在 Node.js 服务器上创建和运行任意函数。该函数可以上传到存储它的服务器,当有人访问该服务器上的 URL 时,它应该执行该函数。该函数不需要在沙箱中进行检查或执行,并且代码应被视为可信的。我怎样才能实现这样的目标?我知道这与FaaS非常接近,但我不认为它是一样的......我仍然需要服务器对请求运行一些预处理等。

zmi*_*mii 5

如果您真正了解所有后果,您可以使用表单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);
Run Code Online (Sandbox Code Playgroud)

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