如何让NodeJS评估多个传统的JS文件

我们使用nodejs作为js引擎来评估服务器端的一些学生脚本,以便我们可以testing它们的正确性。

有没有一种方法可以“需要”或“导入”多个传统的.js文件? 我们需要包含来自多个用户的提交。 或者我不得不连接文件?

是的,Node.JS(像大多数高级语言)支持dynamic导入。 例如,如果您有一个文件列表

var files = ["student1.js", "student2.js", "student3.js", ...]; 

那么你可以简单地做

 files.forEach(function(f) { try { require(f); } catch(e) { console.log("Error in file: "+f); } }); 

这将自动导入和评估这些文件。 请注意,它可能会抛出一个exception(因为文件中的错误),所以这就是为什么它用try{}catch{}包装的原因。

但是,如果您将脚本保存在数据库和Node.JS中,则只能将它们作为string使用,然后可以使用eval:

 var scripts = ["var x = 1;", "console.log('test');", ...]; scripts.forEach(function(s) { try { eval(s); } catch(e) { console.log("Error in script:\n"+s); } }); 

当然,“传统”(我假设你的意思是浏览器端的JavaScript)脚本可能与Node.JS不兼容(例如Node.JS中没有window )。

警告:请注意,这两种方法都是不安全的(用户可以上传恶意脚本),所以也许最好的办法是为每一个方法产生一个单独的Node.JS进程(在受限制的环境中)。 你也可以为它写一个脚本,只是更复杂一些。