neo4j为JavaScript提供的示例脚本赢得';跑不动
我是graph数据库生态系统的新手,一开始我正在尝试neo4j。我非常愿意与node和neo4j合作。因此,在快速搜索后,我发现这是一个官方支持的JavaScript驱动程序,并提供了一个示例:neo4j为JavaScript提供的示例脚本赢得';跑不动,javascript,node.js,neo4j,cypher,Javascript,Node.js,Neo4j,Cypher,我是graph数据库生态系统的新手,一开始我正在尝试neo4j。我非常愿意与node和neo4j合作。因此,在快速搜索后,我发现这是一个官方支持的JavaScript驱动程序,并提供了一个示例: const neo4j = require('neo4j-driver') const driver = neo4j.driver(uri, neo4j.auth.basic(user, password)) const session = driver.session() const personN
const neo4j = require('neo4j-driver')
const driver = neo4j.driver(uri, neo4j.auth.basic(user, password))
const session = driver.session()
const personName = 'Alice'
try {
const result = await session.run(
'CREATE (a:Person {name: $name}) RETURN a',
{ name: personName }
)
const singleRecord = result.records[0]
const node = singleRecord.get(0)
console.log(node.properties.name)
} finally {
await session.close()
}
// on application exit:
await driver.close()
现在,当我运行此代码时,立即出现以下错误:
SyntaxError: await is only valid in async function
现在我想我理解了这个错误,我必须用匿名异步函数包装try-catch块来消除这个错误。更改后的代码正文为:
const config = {
"neo4j": {
"url": "neo4j://localhost",
"authUser": "neo4j",
"authKey": "adminPassword"
}
}
const neo4j = require("neo4j-driver");
const driver = neo4j.driver(
config.neo4j.url,
neo4j.auth.basic(config.neo4j.authUser, config.neo4j.authKey)
);
const session = driver.session();
(async () => {
try {
const result = await session.run('CREATE (a:Person {name: $name}) RETURN a', { name: 'Alice' });
const singleRecord = result.records[0];
const node = singleRecord.get(0);
console.log(node.properties.name);
} catch (error) {
console.log("Error Body: ", error);
} finally {
await session.close();
}
})();
await driver.close();
但令我沮丧的是,我遇到了另一个非常神秘的错误:
{ Neo4jError: Could not perform discovery. No routing servers available. Known routing table: RoutingTable[database=Sample database, expirationTime=0, currentTime=1592397056399, routers=[], readers=[], writers=[]]
at captureStacktrace (/Users/pc/node_modules/neo4j-driver/lib/result.js:263:15)
at new Result (/Users/pc/node_modules/neo4j-driver/lib/result.js:68:19)
at Session._run (/Users/pc/node_modules/neo4j-driver/lib/session.js:174:14)
at Session.run (/Users/pc/node_modules/neo4j-driver/lib/session.js:135:19)
at /Users/pc/neoNode.js:20:38
at Object.<anonymous> (/Users/pc/neoNode.js:31:3)
at Module._compile (module.js:653:30)
at Object.Module._extensions..js (module.js:664:10)
at Module.load (module.js:566:32)
at tryModuleLoad (module.js:506:12) code: 'ServiceUnavailable', name: 'Neo4jError' }
{Neo4jError:无法执行发现。没有可用的路由服务器。已知路由表:RoutingTable[database=Sample database,expirationTime=0,currentTime=1592397056399,routers=[],readers=[],Writer=[]
在captureStacktrace(/Users/pc/node_modules/neo4j driver/lib/result.js:263:15)
在新结果中(/Users/pc/node_modules/neo4j driver/lib/Result.js:68:19)
在会话中运行(/Users/pc/node\u modules/neo4j driver/lib/Session.js:174:14)
在Session.run(/Users/pc/node_modules/neo4j driver/lib/Session.js:135:19)
at/Users/pc/neoNode.js:20:38
at对象。(/Users/pc/neoNode.js:31:3)
编译(Module.js:653:30)
在Object.Module.\u extensions..js(Module.js:664:10)
在Module.load(Module.js:566:32)
在tryModuleLoad(module.js:506:12)处,代码为:“ServiceUnavailable”,名称为:“Neo4jError”}
首先,我认为您的URL应该是“URL”:bolt://localhost:7687“
您仍然在异步函数外部使用wait driver.close()
如果您开始使用neo4j,请寻找OGM(对象图模型)来帮助您。我在这方面也遇到了一些问题 首先,纳塔姆·奥利维拉是正确的。您需要使用
bolt
协议,等待承诺需要在async
函数中。出于某种原因,文档中的一些示例中使用了neo4j
协议。此外,如果您在某种未指定的环境之外使用Neo4j当前在驱动程序手册和javascript驱动程序部分中提供的两个示例,则它们似乎都会导致错误
不过,在npmjs的页面上有一些线索,所以通过将它们应用到现有代码中,我至少能够吐出一些数据。不过,我还想知道如何在async
函数中实现这一点,因此非常欢迎您解释如何使用此驱动程序
以下是对我有效的方法:
const neo4j = require('neo4j-driver')
const cnx = {
user: 'neo4j',
password: 'some passphrase',
uri: 'bolt://localhost:7687'
}
const driver = neo4j.driver(cnx.uri, neo4j.auth.basic(cnx.user, cnx.password))
driver.verifyConnectivity()
.then((cnxMsg) => {
console.log(cnxMsg)
})
const session = driver.session({ database: 'neo4j' })
session.run('MATCH (n:Movie) RETURN n LIMIT 5')
.subscribe({
onKeys: keys => {
console.log(keys)
},
onNext: record => {
console.log(record.get('n').properties.title)
},
onCompleted: () => {
session.close()
},
onError: error => {
console.error(error)
}
})
这将使用NPM文档中的流式API发布一些电影。(注意:只有在您启动/安装了电影数据库时,它才会起作用,因此请仔细检查您是否删除了它,因为它的删除也是Neo4j教程的一部分。)现在只需将MATCH
Cypher查询更改为您喜欢的任何查询,并处理输出,例如通过管道将其转换为Express即可
资料来源: