2017-05-29 11 views
0

Node.jsのjavascript関数を、あるサーバーから別のサーバーへのURLのパラメーターとして渡したいとします。それは私がコードを評価するjavascript関数eval()を使用しますが、これは問題を引き起こすことが示唆された他の質問にAcccordingURLで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)}) 

:私は、データを送信するためにaxiosのNPMパッケージを使用しています、ここではコードのサンプルです。

まず、受信側で関数を渡して評価しません。そして、私は機能を得るために評価する場合でも、それは(

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

バーは、関数の参照ではない例えば

を参照することはできませんという名前の関数を(私は無名関数を渡したい)だろうbarは未定義です)、typeof baz()を使用した場合、戻り値はSTRINGです。

URLに関数を渡すにはどうすればよいですか?

心のPOSTリクエストしてくださいそれは強く、そのようでevalの使用を落胆のバイナリ

+0

関数は、関数宣言の「ソースコード」を返す 'のtoString()'メソッドを有します。 –

+0

さて、次は何ですか?私はコードを "()"に分割し、関数ビルダーなどを使ってコードを改造することを考えていました。あなたのご提案は? – omarwaleed

+2

ええ、それは行く方法だと思います。関数の本体だけを取り除き、 'Function()'コンストラクタを使って関数を再作成するための文字列操作/正規表現を行うことができます。引数を渡すのはちょっと難しいはずです。しかし、IMOでは、サーバーから "ビヘイビア"を渡すのは素晴らしいことではありません。あなたは、明確に定義された振る舞いを持ち、データだけを前後に渡すようにサーバーを設計します。 –

答えて

1

としてデータを送信します。これにより、深刻なセキュリティ上の問題が多数発生します。

あなたは、いくつかの方法があります:

1)オブジェクト内部のNode.jsであなたの機能を保存し、キーとして、関数の名前を使用します。次に、あなたのコールバックでちょうど関数の名前を渡すと、対応する機能を取得し、それを

2を実行)パラメータを提供し、あなたが希望する機能

3を実行し、パラメータに依存するときswitch文を作成)する場合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

関連する問題