我们可以使用图形数据库neo4j和react js吗?如果不是这样,有没有替代选项将图形数据库包含在反应JS中?
答案 0 :(得分:2)
<强> TL;博士; 强>
是的,你可以!
您将两种不同的技术混合在一起。 Neo4j是图形数据库,React.js是前端框架。
您可以从JavaScript - http://neo4j.com/developer/javascript/
连接到Neo4j答案 1 :(得分:2)
很简单,您只需要neo4j-driver
:https://www.npmjs.com/package/neo4j-driver
以下是最简单的用法:
neo4j.js
//import { v1 as neo4j } from 'neo4j-driver'
const neo4j = require('neo4j-driver').v1
const driver = neo4j.driver('bolt://localhost', neo4j.auth.basic('username', 'password'))
const session = driver.session()
session
.run(`
MATCH (n:Node)
RETURN n AS someName
`)
.then((results) => {
results.records.forEach((record) => console.log(record.get('someName')))
session.close()
driver.close()
})
最佳做法是在获取数据后始终关闭会话。它价格低廉,重量轻。
最佳做法是只在程序完成后关闭驱动程序会话(如Mongo DB)。如果你在一个糟糕的时间关闭驱动程序,你会看到极端的错误,如果你是初学者,这是非常重要的。您将看到“连接到服务器已关闭”等错误。例如,在异步代码中,如果运行查询并在解析结果之前关闭驱动程序,则会遇到错误的时间。
您可以在我的示例中看到我之后关闭了驱动程序,但仅用于说明正确的清理。如果您在独立的JS文件中运行此代码进行测试,您将看到node.js在查询后挂起,您需要按CTRL + C退出。添加driver.close()
修复了这些问题。通常,在程序退出/崩溃之前,驱动程序不会关闭,这在后端API中永远不会,直到用户在前端注销。
现在知道这一点,你将有一个良好的开端。
请记住,每次都session.close()
,并注意driver.close()
。
您可以轻松地将此代码放入React组件或操作创建器中并呈现数据。
您会发现与Axios联系并与之合作没有什么不同。
您也可以在事务中运行语句,这有利于对受影响的节点进行writelock。你应该先彻底研究一下,但交易流程是这样的:
const session = driver.session()
const tx = session.beginTransaction()
tx
.run(query)
.then(// same as normal)
.catch(// errors)
// the difference is you can chain multiple transactions:
const tx1 = await tx.run().then()
// use results
const tx2 = await tx.run().then()
// then, once you are ready to commit the changes:
if (results.good !== true) {
tx.rollback()
session.close()
throw error
}
await tx.commit()
session.close()
const finalResults = { tx1, tx2 }
return finalResults
// in my experience, you have to await tx.commit
// in async/await syntax conditions, otherwise it may not commit properly
// that operation is not instant
答案 2 :(得分:1)
有趣的话题。我在React App中使用驱动程序,最近遇到了一些问题。每当您的示例中完成生命周期挂钩时,我都会关闭会话。当那里有更密集的查询时,我会看到超时错误。回到我的设置,我们决定通过在一些更昂贵的查询中关闭驱动程序来进行试验,并且看起来(仍然需要更多测试)崩溃已经消失了。
如果要部署实际应用程序,我敦促您仅在使用DB-React设置时考虑身份验证和授权,因为您必须在客户端中存储neo4j服务器的用户名/密码。我正在研究让Neo4J服务器发行令牌并接收令牌进行授权的选项,但是最佳实践是确保中间有一个Node.js服务器,其中带有Passport之类的东西来处理身份验证。
因此,总而言之,也许最好的情况是仅在Node中使用驱动程序,并使浏览器始终使用axios与Node服务器通信...