你可以“存储”一个数据库的JavaScript,然后执行它以后?

(请把安全问题或任何事情放在窗口外面,因为它是一个内部应用程序)

基本上我想要做的是存储一个JavaScript函数在数据库中:

function x(name) { return name + 1; } 

然后在稍后取出DB行

(伪码在这里)

  x = db.get('function').where('id').equals(1); console.log(x('bob')); //should print "bob +1 " 

所以这里是我设想的情景:

基本上,我得到一个JSON对象,并根据一定的标准,我想做一些转换到该JSON,并输出新的转换JSON。 为了“主”应用程序,我不想硬编码的转换逻辑,而是它将是dynamic的(dynamic的意义上,不同的开发人员将在运行时提供)

所以一个数据库可能包含:

 ID | javascript ==================== 1 | (some js code) 2 | (same func, different code) 

我想要做的是执行存储在数据库中的JS代码,用我select的input。

如果它更容易,function名称将是标准的..即我们可以假设保存在数据库中的JavaScript将全部遵循:

 function transform(input) { /* below this line logic will change * end diff logic/ return output } 

您可以使用eval()函数执行任意JS的任意string,这将返回任何被评估的结果。

所以,为了你的目的,你想分配一个variables来保存string中的(eval'ed)函数,你可以这样做:

 // retrieve string from DB somehow var functionString = "(function whatever(name) { return name + 1; })"; var x = eval(functionString); console.log(x("bob")); // logs "bob1" 

你可以使用eval来执行一个JS的String。 我不知道你在做什么,也不知道这是为什么,但是这是非常灰心的。

尝试在您的Web控制台中运行此操作:

 eval('alert(\'hello\')') 

Oracle Labs的Matthias Brantner最近展示了一个实验性function,即多语言引擎(MLE),它允许在Oracle数据库中执行JavaScript:

https://www.youtube.com/playlist?list=PL_lVOJzXeE_8UwipLqfu6vKnOYDF3ITaI

那里的演示包括:

  • JavaScript模块作为SQL中的UDF
  • Oracle数据库中JavaScript的SQL驱动程序
  • 在Oracle数据库中重新组合ORM
  • 基于JavaScript的SQL集合函数

访问此页面以获取更多信息,下载包含DB + MLE的虚拟机,并通过MLE社区提供反馈: http : //www.oracle.com/technetwork/database/multilingual-engine/overview/index.html

你可以在JavaScript中做到这一点。 这是一个例子。

 var f = "function(x) {return x * 2}" var x = 4; eval("("+f+")("+x+")"); 

但这是非常不安全的,因为您无法确保您正在执行的function不包含危险代码。 相反,你可以使用一个解释器。 要么使用像这样的https://github.com/NeilFraser/JS-Interpreter现有的

或者写你自己的。 它不一定是JS。 如果语言非常简单,你可以在下午写一个翻译。