如何从代码文本中加载模块?

时间:2015-07-20 08:03:38

标签: javascript node.js

我想从原始文本加载模块,例如

var code = "exports.name = 'hello'";
// Is there such a function?
var name = requrie_from_code(code).name;
console.log(name); // should be 'hello'

我认为可以先将代码保存到tmpcode.js然后require('./tmpcode.js')等临时文件中来完成。但有没有办法直接做到这一点?

1 个答案:

答案 0 :(得分:0)

要将JavaScript字符串解释为JavaScript本身,您应该使用eval函数...但是请注意我的警告,如果有任何形式的用户输入,或者您需要复杂的调试,那么您就是要碰到一些墙壁,它会受伤。

JavaScript的eval接受字符串输入并对其进行解释,就像那样......这是一个例子:

var test = "var example = 5;";
eval(test);
console.log(example);

简单......

以下是eval可能存在危险的一些情况!

假设您出于某种原因拥有以下代码:

dbModule.syncConnection(function(database){
  eval("var test = '" + someUserInput + "'");
});

通过这种方式,用户可以通过输入以下内容轻松绕过您设置的内容:

"'; database.query('DELETE EVERYTHING MWAHAHA'); '"

eval函数将变为:

var test = ''; database.query('DELETE EVERYTHING MWAHAHA'); ''

......所以这只是一个关于eval如何危险的简单例子。

否则,在解释JavaScript之前,没有任何其他安全方法可以检查JavaScript,除非你自己查看字符串并禁止某些可能的攻击....

但请记住,任何可能出错的事都会出错。通过用户输入,有无限的可能性。