使用Neo4j和React JS

时间:2015-10-13 10:25:20

标签: neo4j reactjs

我们可以使用图形数据库neo4j和react js吗?如果不是这样,有没有替代选项将图形数据库包含在反应JS中?

3 个答案:

答案 0 :(得分:2)

<强> TL;博士;

是的,你可以!

您将两种不同的技术混合在一起。 Neo4j是图形数据库,React.js是前端框架。

您可以从JavaScript - http://neo4j.com/developer/javascript/

连接到Neo4j

答案 1 :(得分:2)

很简单,您只需要neo4j-driverhttps://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服务器通信...