Tratando de interpretar la API Node-Neo4j

Soy bastante nuevo en la encoding, así que perdóneme si mi código es ilegible o mi pregunta es simplista.

Estoy tratando de crear una pequeña aplicación de servidor que (entre otras cosas) muestre las propiedades de un nodo neo4j. Estoy usando el cliente de API REST Node-Neo4j de node.js, Express y Aseem Kishore, cuya documentación se puede encontrar aquí.

Mi pregunta proviene de mi incapacidad para obtener las propiedades de los nodos y las rutas. Puedo devolver un nodo o ruta, pero parecen estar llenos de objetos con los que no puedo interactuar. Revisé los documentos de la API en busca de algunos ejemplos de cómo se llaman los métodos particulares, pero no encontré nada.

He estado tratando de llamar al método #toJSON como “db.toJSON (neoNode);” pero me dice que db no contiene ese método. También he intentado, “var x = neoNode.data” pero devuelve indefinido.

¿Podría alguien ayudarme a resolver esto?

//This file accepts POST data to the "queryanode" module //and sends it to "talkToNeo" which queries the neo4j database. //The results are sent to "resultants" where they are posted to //a Jade view. Unfortuantly, the data comes out looking like // [object Object] or a huge long string, or simply undefined. var neo4j = require('neo4j'); var db = new neo4j.GraphDatabase('http://localhost:7474'); function resultants(neoNode, res){ // if I console.log(neoNode) here, I now get the 4 digit integer // that Neo4j uses as handles for nodes. console.log("second call of neoNode" + neoNode); var alpha = neoNode.data; //this just doesn't work console.log("alpha is: " +alpha); //returns undefined var beta = JSON.stringify(alpha); console.log("logging the node: "); console.log(beta);// still undefined res.render("results",{path: beta}); res.end('end'); } function talkToNeo (reqnode, res) { var params = { }; var query = [ 'MATCH (a {xml_id:"'+ reqnode +'"})', 'RETURN (a)' ].join('\n'); console.log(query); db.query(query, params, function (err, results) { if (err) throw err; var neoNode = results.map(function (result){ return result['a']; //this returns a long string, looks like an array, //but the values cannot be fetched out }); console.log("this is the value of neoNode"); console.log(neoNode); resultants(neoNode, res); }); }; exports.queryanode = function (req, res) { console.log('queryanode called'); if (req.method =='POST'){ var reqnode = req.body.node; //this works as it should, the neo4j query passes in talkToNeo(reqnode, res) //the right value. } } 

EDITAR

Oye, solo quería responder mi propia pregunta para cualquier nodo de Google, neo4j, data o “¿Cómo obtengo las propiedades neo4j?”

El objeto gigantesco de neo4j, que cuando lo hiciste, obtuviste todas las "http://localhost:7474/db/data/node/7056/whatever" urls en todas partes, es JSON. Puedes consultarla con su propia notación. Puede establecer una variable en el valor de una propiedad como esta:

 var alpha = unfilteredResult[0]["nodes(p)"][i]._data.data; 

Tratar con este JSON puede ser difícil. Si eres como yo, el objeto es mucho más complejo de lo que cualquier ejemplo de Internet te puede preparar. Puede ver la estructura colocándola a través de un visor JSON, pero lo importante es que a veces hay una capa superior sin nombre adicional para el objeto. Por eso llamamos a la capa cero con notación de corchete como tal: unfilteredResult[0] El rest de la línea mezcla cuadrada y notación de puntos pero funciona. Este es el código final para una función que calcula la ruta más corta entre dos nodos y la atraviesa. Las variables finales se pasan a una vista de Jade.

 function talkToNeo (nodeone, nodetwo, res) { var params = { }; var query = [ 'MATCH (a {xml_id:"'+ nodeone +'"}),(b {xml_id:"' + nodetwo + '"}),', 'p = shortestPath((a)-[*..15]-(b))', 'RETURN nodes(p), p' ].join('\n'); console.log("logging the query" +query); db.query(query, params, function (err, results) { if (err) throw err; var unfilteredResult = results; var neoPath = "Here are all the nodes that make up this path: "; for( i=0; i<unfilteredResult[0]["nodes(p)"].length; i++) { neoPath += JSON.stringify(unfilteredResult[0]['nodes(p)'][i]._data.data); } var pathLength = unfilteredResult[0].p._length; console.log("final result" + (neoPath)); res.render("results",{path: neoPath, pathLength: pathLength}); res.end('end'); }); }; 

Le recomendaría que vea la aplicación de muestra, que actualizamos para Neo4j 2.0, que utiliza Cypher para cargar los datos y las tags de nodo para modelar los tipos de Javascript.

Puede encontrarlo aquí: https://github.com/neo4j-contrib/node-neo4j-template

Por favor haga más preguntas después de ver esto.