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

标签 javascript node.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 不兼容(例如,Node.JS 中没有 window)。

警告:请注意,这两种方法都不安全(用户可以上传恶意脚本),因此最好的办法可能是为每个方法生成一个单独的 Node.JS 进程(在受限环境中)他们。您也可以为此编写一个脚本,只是稍微复杂一点。

关于javascript - 如何让NodeJS评估多个传统JS文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18119032/

相关文章:

javascript - 开 Jest 期望之后的一切都没有被调用

javascript - 如何在 Angular 模板中显示日期和时间并保持更新?

javascript - 在 Three.js 中旋转天空盒

javascript - 使用 javascript 选项卡显示排行榜

node.js - 如何在 Node imagemagick模块转换函数中传递多个参数

php - 在 ajax 响应文本中发送 json 字符串和 html 数据 - 如何?

node.js - 如何在具有 yarn 工作空间的 monorepo 中从 nodejs 项目构建 docker 镜像

javascript - 如何将 gulp frontmatters 输出传递给 Gulp 中的另一个插件?

javascript - 部署 Heroku 时应用程序崩溃(代码 h10)

node.js - Uncaught ReferenceError : angular is not defined - Mean. IO