我从Node.js向Neo4j发送查询,但我没有看到任何回调。查询已正确执行,但我无法在回调中看到任何信息并将其记录在控制台中。
我认为node.js会在任何数据出现之前执行console.log,但我不知道如何解决它。
Node.js的:
// Load Modules
var neo4j = require('neo4j');
// Database Connection
var db = new neo4j.GraphDatabase("http://neo4j:Gemitis26@localhost:7474/");
// Inizialize Query
var query = "CREATE (:Song {name:'James'})";
db.cypher(query, function(err, node){
if(err) throw err;
// Output node properties.
console.log(node.data);
// Output node id.
console.log(node._id);
});
输出:
C:\Users\RRamos\Documents\Projects\test-neo4j>node index.js
[]
undefined
正如我所说,我检查它并且它已正确创建。
答案 0 :(得分:0)
您的代码中存在许多问题:
您的Cypher查询没有RETURN
子句,因此您的查询响应将始终为空数组(因为它永远不会包含任何结果行)。
您的回调期望响应的数据结构错误。
试试这段代码。它会转出错误(如果有)和响应,以便您可以看到响应的实际数据结构。它还使用for循环遍历响应中的数据行,并打印出每个s
节点的属性及其本机ID。在您的情况下,最多只有一个结果行,因此循环不是必需的,但通常可以有多行。
// Load Modules
var neo4j = require('neo4j');
// Database Connection
var db = new neo4j.GraphDatabase("http://neo4j:Gemitis2@localhost:7474/");
// Inizialize Query
var query = "MATCH (s:Song {name:'James'}) RETURN s";
db.cypher(query, function(err, res){
// Dump out the err and response, to see the data structure.
console.log("err: %j, res: %j", err, res);
if(err) throw err;
// Print out the data for each row in the response.
for (var i = 0; i < res.length; i++) {
var s = res[i].s;
// Output node properties.
console.log(s.properties);
// Output node id.
console.log(s._id);
}
});