2017-05-29 6 views
0

Ich möchte eine JavaScript-Funktion in Node.js als Parameter in einer URL von einem Server an einen anderen weitergeben. Ich verwende axios npm Paket die Daten zu senden, hier ist ein Beispiel für den Code:Wie man JavaScript-Funktion in URL übergeben?

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)}) 

auf andere Fragen Acccording wurde vorgeschlagen, dass ich eval() JavaScript-Funktion den Code zu bewerten, aber dies führt zu einem Problem.

Zuerst möchte ich die Funktion auf der Empfängerseite weitergeben und NICHT bewerten. Und selbst wenn ich beurteilen, eine Funktion zu erhalten, wäre es eine benannte Funktion sein (Ich will eine anonyme Funktion zu übergeben), die nicht

verwiesen werden kann

Zum Beispiel

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

bar ist kein Bezug der Funktion (bar ist nicht definiert) und auch wenn Sie typeof baz() verwenden, ist der zurückgegebene Wert STRING.

Wie kann ich eine Funktion in einer URL übergeben?

Halt in POST-Anfragen Geist senden Daten als binäre

+0

Funktionen haben eine 'toString()' Methode, die die „Quellcode“ der Funktionsdeklaration zurückgibt. –

+0

Ok, was kommt als nächstes? Ich dachte daran, den Code auf "()" aufzuteilen und ihn mit einem Funktionsgenerator oder etwas zu reformieren. Was ist dein Vorschlag? – omarwaleed

+2

Ja ich denke das ist der Weg zu gehen. Sie könnten string manipulation/regex verwenden, um nur den Rumpf der Funktion auszublenden und einen 'Function()' -Konstruktor zu verwenden, um die Funktion neu zu erstellen. Argumente zu übergeben sollte ein bisschen schwieriger sein. IMO jedoch klingt es nicht gut, "Verhalten" von Servern zu übergeben. Sie entwerfen Server so, dass sie ein genau definiertes Verhalten aufweisen und nur Daten hin- und herleiten. –

Antwort

1

Es ist die Verwendung von eval auf diese Weise dringend abgeraten. Dies eröffnet viele ernsthafte Sicherheitsprobleme.

Sie haben mehrere Möglichkeiten:

1) Speichern Sie Ihre Funktionen in node.js innerhalb eines Objekts, und den Namen der Funktion als Schlüssel verwenden. Dann in Ihrem Rückruf nur den Namen der Funktion übergeben und die entsprechende Funktion abrufen und

2) ausführen, um einen Parameter angeben und eine switch-Anweisung erstellen, wenn auf den Parametern in Abhängigkeit Sie die gewünschte Funktion ausführen

3) Wenn Wenn Sie Ihre Funktionen in der Datei node.js definieren, wird alles, was definiert ist, im Gültigkeitsbereich der Datei gespeichert. Sie haben also Ihre Funktionen bereits dort definiert und können sie auch in Klammern aus dem aktuellen Bereich abrufen.

Ich hoffe, es

Edited hilft ein Beispiel des ersten Verfahrens zur Darstellung:

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

Könntest du bitte ein Beispiel für die erste Methode nennen, die du erwähnt hast? – omarwaleed

+0

getan, für irgendwelche Fragen lassen Sie es mich wissen – quirimmo