我们正在使用 nodejs 作为 js 引擎来评估服务器端的一些学生脚本,以便我们可以测试它们的正确性。
有没有办法我们可以“要求”或“导入”多个传统的 .js 文件?我们需要包括来自多个用户的提交。或者我必须连接文件?
我们正在使用 nodejs 作为 js 引擎来评估服务器端的一些学生脚本,以便我们可以测试它们的正确性。
有没有办法我们可以“要求”或“导入”多个传统的 .js 文件?我们需要包括来自多个用户的提交。或者我必须连接文件?
是的,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 不兼容(例如,window
Node.JS 中没有)。
警告:请注意,这两种方法都是不安全的(用户可以上传恶意脚本),因此最好的办法是为每个方法生成一个单独的 Node.JS 进程(在受限环境中)。你也可以为此编写一个脚本,只是有点复杂。