javascript - NodeJS 和 Neo4j 的异步行为问题

标签 javascript node.js neo4j asynchronous

我是一名自学成才的新手程序员,正在开发一个使用 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/

相关文章:

javascript - 两个不同的 POST 请求正在使用同一个变量

neo4j - 使用合并更新关系

linux - Neo4j 警告 : Max 1024 open files allowed, 建议至少 40 000。请参阅 Neo4j 手册

javascript - 使用Jquery删除动态添加表行但无法保存变量值

JavaScript - 在类方法内动态设置类属性

javascript - 是否可以使用 findAll() 创建查询并使用数据透视表(多对多关系)中的 ForeignKey 获取过滤结果?

javascript - 如何通过 Node.js/AdonisJs 从 Neo4j 查询结果发送 CSV 数据

php - 将 PHP 对象传递给 javascript

c# - 拖放后回发?

node.js - node.js mongodb 中的 db.getUser