我对编码很陌生,所以如果我的代码不可读或我的问题过于简单,请原谅我。
我正在尝试创建一个小服务器应用程序,其中(除其他外)显示neo4j节点的属性。我正在使用node.js,Express和Aseem Kishore的Node-Neo4j REST API客户端,可以找到其文档here.
我的问题源于我无法获取节点和路径的属性。我可以返回一个节点或路径,但它们似乎充满了我无法与之交互的对象。我倾注了API文档,寻找一些如何调用特定方法的例子,但我一无所获。
我一直试图调用#toJSON方法," db.toJSON(neoNode);"但它告诉我db不包含该方法。我也试过了," var x = neoNode.data"但它返回undefined。
有人可以帮我解决这个问题吗?
//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.
}
}
修改
嘿,我只是想回答我自己的问题,任何人用google搜索节点,neo4j,数据或"我如何获得neo4j属性?"
来自neo4j的巨大物体,当你按字母顺序排列时,你到处都有"http://localhost:7474/db/data/node/7056/whatever"
个网址,这就是JSON。您可以使用自己的表示法查询它。您可以将变量设置为属性的值,如下所示:
var alpha = unfilteredResult[0]["nodes(p)"][i]._data.data;
处理这个JSON可能很困难。如果你像我一样,这个对象比任何互联网示例都可以为你准备的东西更复杂。您可以通过JSON Viewer,来查看结构,但重要的是有时会有一个额外的,未命名的顶层到该对象。这就是为什么我们用方括号表示法调用第0层的原因:unfilteredResult[0]
该行的其余部分混合了方形和点符号,但它有效。这是一个函数的最终代码,它计算两个节点之间的最短路径并通过它循环。最终变量将传递到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');
});
};
答案 0 :(得分:0)
我建议您查看我们针对Neo4j 2.0更新的示例应用程序 它使用Cypher加载数据和Node-labels来为Javascript类型建模。
您可以在此处找到它:https://github.com/neo4j-contrib/node-neo4j-template
看完后再问一些问题。