2015-07-20 20 views
1

我想从原始文本加载模块,如如何从代码文本加载模块?

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

正在使用eval()函数评估代码是否可以接受?我认为它会给你同样的结果。 –

回答

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的任何其他安全的方式,除非你通过串自己运行和禁止某些可能的攻击....

但请记住,任何可能出错会出错。而用户输入则有无限的可能性。