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

时间:2013-08-08 06:10:14

标签: javascript node.js

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

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

1 个答案:

答案 0 :(得分:3)

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

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

然后你可以简单地做

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

这将自动导入和评估这些文件。请注意,它可能会抛出异常(因为文件中存在错误),所以这就是它被try{}catch{}包裹的原因。

但是如果你将脚本保存在数据库和Node.JS中,你只能将它们作为字符串,那么你可以使用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进程(在受限制的环境中)他们。你也可以为它编写一个脚本,它只是有点复杂。