2017-02-18 16 views
0

ノードに 'arr'で示されたクエリの配列からクエリをneo4jに挿入しようとしています。私は、この配列がconsole.log(クエリ)が単一のクエリを出力するときに関数に渡していることを知っています。私は非同期と何か関係があると思いますが、これは初めてのことです。私は、ブラウザで取得していますエラーです「未定義のプロパティを読み取ることができません 『ポスト』」request.post経由で配列経由でneo4jにクエリを送信する

function runCypherQuery(arr,callback) { 
    var query; 

    for(var i = 0; i < arr.length; i++){ 

    query = arr[i]; 
    console.log(query); 

     request.post({ 
      headers:{ 
       "Authorization": "Basic bmVvNGo6cGxleGlz" 
      }, 
        uri: httpUrlForTransaction, 
        json: {statements: [{statement: query}]} 
     },function (err, res, body) { 
      callback(err,res,body);    
     }) 
} 
} 

は、私は単一のクエリでapp.jsためにループすることなく、同じ機能をコピーしようと、それはありません送信するために管理しました問題は、そう

var query = "CREATE (u {id:573116})"; 

request.post({ 

    headers:{ 
    "Authorization": "Basic bmVvNGo6cGxleGlz" 
    }, 
     uri: httpUrlForTransaction, 
     json: {statements: [{statement: query}]} 
    }, 
    function (err, res, body) { 
      console.log(body); 
}) 

のようにすべてのヘルプはあなたが十分な情報を提供しなかったが、それはrunCypherQuery機能の範囲内ではないので、request変数が定義されていないように見える

答えて

0

を高く評価しました。

function runCypherQuery(request, arr, callback) 

してから関数を呼び出すときにrequestを渡しますのようなものに署名を変更することでそれを渡してみてください。

あなたのコードは非同期的にリクエストを行い、実行の順序を保証するものではないことを知っておくべきです。あなたが気にしないなら、これは問題ではないかもしれません。

arrに別々のCypherクエリがある場合、各HTTP要求だけでなく、クエリごとにトランザクションを開始してコミットする際のオーバーヘッドが発生するため、コードが非常に非効率的になることがあります。可能であれば、合理的であれば、クエリをマージする方が良いでしょう。例として、Nノードを作成しようとしているだけの場合は、1つのクエリでそのノードを実行できるはずです。

+0

ご返信ありがとうございます。配列はオンザフライで作成されているので、この関数が呼び出される前に別の関数から配列が返されます。配列の最大値は60ですが、実行順序は関係ありません。あなたが言ったように '要求'を渡してみましたが、同じエラーが発生しています。なぜなら、 'request.post'はノードモジュールであるため、関数内にあるべきではないからですか?関数を使用せずにデータを投稿できる他の方法はありますか? –

関連する問題