我是一名自学成才的新手程序员,正在开发一个使用 Angular.js、Node.js 和图形数据库 neo4j 的简单网络应用程序。现在我正在尝试获取一个非常基本的查询来执行并将数据返回给客户端。执行后我收到关闭服务器的错误。
收到get请求后执行以下函数:
exports.test = function (req, res) {
var neo4j = require('neo4j');
var db = new neo4j.GraphDatabase('http://localhost:7474');
var query = [
'MATCH n',
'RETURN n.name, n, labels(n)'
];
db.query(query, function (err, results) {
if (err) {throw err};
var data = results.map(function(result) {
return result;
});
res.send(data)
}
)};
我在控制台日志中收到以下错误:java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.lang.String
(如果有用,我可以提供整个日志)
如果有任何见解,我将不胜感激。
最佳答案
错误的原因是您将数组作为查询传递:
var query = [
'MATCH n',
'RETURN n.name, n, labels(n)'
];
db.query(query, function (err, results) { ... }
那应该是一个字符串,因此是 java.lang.ClassCastException
。
所以你要么加入query
数组使它成为一个字符串,要么不使用数组:
// solution 1
var query = [
'MATCH n',
'RETURN n.name, n, labels(n)'
].join(' ');
// solution 2
var query = 'MATCH n RETURN n.name, labels(n)';
此外,这段代码有点多余:
var data = results.map(function(result) {
return result;
});
res.send(data);
为什么不用这个?
res.send(results);
关于javascript - NodeJS 和 Neo4j 的异步行为问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17509049/