2017-05-29 92 views
0

我想在Node.js中传递一个javascript函数作为从一个服务器到另一个服务器的URL参数。我使用爱可信NPM包发送的数据,这里的代码示例:如何在URL中传递javascript函数?

let f = function(){ 
    return "Returned Value Here"; 
} 
axios({url: '/', method: 'POST', data: {something: "foo", bar: f}}) 
.then((response)=>{console.log(response)}) 
.catch((reason){console.log(reason)}) 

Acccording其他问题时有人建议我用eval() javascript函数来评估代码,但是这会导致一个问题。

首先我想通过接收端的功能,而不是评估它。而且,即使我评估获得的功能将是一个命名函数(我想传递一个匿名函数)不能被引用

例如

let bar = eval('function baz(){console.log("Test");}') 

酒吧是不是函数的引用(酒吧未定义),并且如果您使用typeof baz(),则返回的值为STRING。

那么如何在URL中传递函数呢?

记住POST请求发送数据的二进制

+0

函数具有一个返回函数声明的“源代码”一个'的toString()'方法。 –

+0

好吧,下一步是什么?我正在考虑将代码分解为“()”,并使用函数构建器或其他方法进行重构。你的建议是什么? – omarwaleed

+2

是的,我认为这是要走的路。你可以通过字符串操作/正则表达式来去除函数的主体,并使用'Function()'构造函数来重新创建函数。传递参数应该有点棘手。然而,IMO向服务器传递“行为”并不是很好。您将服务器设计为具有明确定义的行为并仅传递数据。 –

回答

1

它强烈反对以这种方式使用eval。这会带来很多严重的安全问题。

你有几种方法:

1)存储您的功能Node.js的对象内,并使用功能键的名称。然后在你的回调只是传递函数的名称,并获取相应的功能,并执行它

2)提供的参数,并创建一个switch语句取决于参数,当你执行所需的功能

3)你可以在你的node.js文件中定义你的函数,定义的所有东西都存储在文件的作用域中。所以实际上,您已经在那里定义了您的函数,并且它们也可以通过当前范围的括号符号访问。

我希望它有助于

编辑的示出了第一方法的一个例子:

let myFunctions = {}; 
myFunctions['f'] = function(){ 
    return "Returned Value Here"; 
}; 
myFunctions['bar'] = function(){ 
    console.log("Test"); 
}; 
axios({url: '/', method: 'POST', data: {something: "foo", bar: f}}) 
.then((response)=>{ 
// considering in your response you have the bar function to be executed you can just do 
myFunctions['bar'](); 
.catch((reason){console.log(reason)}) 
+0

你能否提供一个例子,你提到的第一种方法? – omarwaleed

+0

完成,任何疑问让我知道 – quirimmo