2017-02-18 27 views
0

Я пытаюсь вставить запросы в neo4j из массива запросов, обозначенных 'arr' в узле. Я знаю, что этот массив переходит к функции, поскольку console.log (query) выводит один запрос, я подозреваю, что это что-то связано с async, но я новичок в этом, поэтому я озадачен. Ошибка я получаю в браузере «Не удается прочитать свойство„пост“неопределенный»Отправка запросов в neo4j через массив через request.post

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

Любая помощь оценили

ответ

0

Вы не предоставили достаточно информации, но это выглядит как переменная request не определена, поскольку она не находится в пределах области видимости функции runCypherQuery. Попробуйте передать его в изменив подпись на что-то вроде:

function runCypherQuery(request, arr, callback) 

, а затем передать request при вызове функции.

Вы должны знать, что ваш код будет асинхронно выполнять запросы и, следовательно, нет гарантии выполнения заказа. Если вам все равно, это может быть не проблема.

Однако, если у вас есть много отдельных запросов Cypher в arr, тогда ваш код может быть очень неэффективным, поскольку накладные расходы возникают не только при каждом запросе HTTP, но также при запуске и совершении транзакций для каждого запроса. Было бы лучше попытаться объединить запросы, если это возможно и разумно. Например, если вы просто пытаетесь создать N узлов, вы сможете сделать это в одном запросе.

+0

Спасибо за ваш ответ. Массив создается «на лету», поэтому возвращается из другой функции до вызова этой функции. Массив имеет максимум 60, и не имеет значения, в каком порядке они выполняются. Я пробовал прохождение в «запросе», как вы сказали, но я все равно получаю ту же ошибку. Это потому, что «request.post» не должен находиться внутри функции, поскольку это модуль узла? Есть ли другой способ опубликовать данные без использования функции? –