从Node.js

时间:2016-04-03 15:30:39

标签: javascript node.js neo4j

我从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

正如我所说,我检查它并且它已正确创建。

1 个答案:

答案 0 :(得分:0)

您的代码中存在许多问题:

  1. 您的Cypher查询没有RETURN子句,因此您的查询响应将始终为空数组(因为它永远不会包含任何结果行)。

  2. 您的回调期望响应的数据结构错误。

  3. 试试这段代码。它会转出错误(如果有)和响应,以便您可以看到响应的实际数据结构。它还使用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);
        }
    
    
    });