首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Neo4J -通过JavaScript连接时未创建的节点

Neo4J -通过JavaScript连接时未创建的节点
EN

Stack Overflow用户
提问于 2020-05-15 23:32:11
回答 2查看 182关注 0票数 0

我试图在neo4j应用程序中向node.js数据库添加一个节点,代码似乎执行得很好,但没有创建任何节点。

这是我的代码:

代码语言:javascript
复制
var neo4j = require('neo4j-driver');

// the rest of my program 

const driver = new neo4j.driver(
  "bolt://localhost:7687",
  neo4j.auth.basic(neouser, neopass)
);
const session = driver.session();
var cypher =
  "MERGE (b:TRIGGER {name:'" +
  rname +
  "'}) MERGE (c:FIELD{name:'" +
  trigger +
  "'}) MERGE (b)<-[:ACTIVATES]-(c)";
try {
  const result = session.run(cypher);
  console.log(result);
} finally {
  console.log("finally");
  session.close();
}
driver.close();

错误的结果是:

代码语言:javascript
复制
Result {
_stack: '\n' +
'    at captureStacktrace (C:\\NGToolbox\\NGToolBox\\node_modules\\neo4j-driver\\lib\\result.js:263:15)\n' +
'    at new Result (C:\\NGToolbox\\NGToolBox\\node_modules\\neo4j-driver\\lib\\result.js:68:19)\n' +
'    at Session._run (C:\\NGToolbox\\NGToolBox\\node_modules\\neo4j-driver\\lib\\session.js:174:14)\n' +
'    at Session.run (C:\\NGToolbox\\NGToolBox\\node_modules\\neo4j-driver\\lib\\session.js:135:19)\n' +
'    at C:\\NGToolbox\\NGToolBox\\routes\\bizrulevis.js:261:30\n' +
'    at Layer.handle [as handle_request] (C:\\NGToolbox\\NGToolBox\\node_modules\\express\\lib\\router\\layer.js:95:5)\n' +
'    at next (C:\\NGToolbox\\NGToolBox\\node_modules\\express\\lib\\router\\route.js:137:13)\n' +
'    at Route.dispatch (C:\\NGToolbox\\NGToolBox\\node_modules\\express\\lib\\router\\route.js:112:3)\n' +
'    at Layer.handle [as handle_request] (C:\\NGToolbox\\NGToolBox\\node_modules\\express\\lib\\router\\layer.js:95:5)\n' +
'    at C:\\NGToolbox\\NGToolBox\\node_modules\\express\\lib\\router\\index.js:281:22',
  _streamObserverPromise: Promise { <pending> },
  _p: null,
  _query: "MERGE (b:TRIGGER {name:'DELETEME.1'}) MERGE (c:FIELD{name:'4001'}) MERGE (b)<-[:ACTIVATES]-(c)",
  _parameters: {},
  _connectionHolder: ConnectionHolder {
    _mode: 'WRITE',
    _database: '',
    _bookmark: Bookmark { _values: [] },
    _connectionProvider: DirectConnectionProvider {
      _id: 3,
      _config: [Object],
      _log: [NoOpLogger],
      _userAgent: 'neo4j-javascript/0.0.0-dev',
      _authToken: [Object],
      _connectionPool: [Pool],
      _openConnections: [Object],
      _address: [ServerAddress]
    },
    _referenceCount: 1,
    _connectionPromise: Promise { <pending> }
  }
}
finally

当我进入Neo4j时,db仍然是空的。

我已经确认它是活动的,我可以使用相同的密码创建一个节点,连接是在安全日志中建立的,并且它不会因为un/pw而失败。一切看起来都很完美,除了所有的一切都没有造成任何问题。

谢谢你的建议。

编辑:添加了驱动程序调用,驱动程序从代码段范围外关闭。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-16 03:47:37

这段代码应该适用于您(假设定义了neouserneopassrnametrigger ):

代码语言:javascript
复制
const neo4j = require('neo4j-driver');

async function doIt() {
  const driver = neo4j.driver(
    "bolt://localhost",
    neo4j.auth.basic(neouser, neopass)
  );
  const session = driver.session();

  try {
    await session.writeTransaction(async txc => {
      var result = await txc.run(
        `MERGE (b:TRIGGER {name: $rname})
         MERGE (c:FIELD {name: $trigger})
         MERGE (b)<-[:ACTIVATES]-(c)
         RETURN b, c`,
        {rname: rname, trigger: trigger}
      )

      result.records.map(record => {
          console.log(`b: ${record.get('b')}, c: ${record.get('c')}`);
      })
    })
  } finally {
    console.log("finally");
    await session.close();
    await driver.close();
  }
}

doIt();

此代码了解处理的异步性质,在事务完成后使用result,然后才关闭会话和驱动程序。它还使用writeTransaction向DB写入。

您应该研究驱动程序的github文件,以了解驱动程序可以使用的所有方法。

票数 1
EN

Stack Overflow用户

发布于 2020-05-25 14:13:19

如果您正在编写API,请尝试使用OGM https://www.npmjs.com/package/neo4j-node-ogm

代码语言:javascript
复制
class SomeModel extends from Model {} //see documentation

坚持下去

代码语言:javascript
复制
const a = new SomeModel()
await a.save()

告诉我这是否对你有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61829948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档