2017-09-13 69 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模塊(我完全錯過了!)和代碼示例! –