Rap*_*ima 6 javascript neo4j node.js
我是 Neo4J 的新手,今天遇到了这个错误,在我的构想中,我正在关闭和打开会话,但是我收到了这个错误。
\n我只是想知道是否已经有一个节点包含请求中收到的电子邮件,如果是,则不注册,如果没有,则正常注册。
\n有谁知道我哪里出错了,我又是 Neo4j 的门外汉
\n提前致谢
\nexports.createUser = (req, res) => {\n\nconst userName = req.body.name;\nconst userEmail = req.body.email;\nconst userPassword = req.body.password;\n\nconst alreadyRegistered = \n session.run(\n `MATCH (n { email: '${userEmail}' })\n RETURN n`\n );\nalreadyRegistered.then(result => {\n session.close();\n if(result.records.length){\n res.send('J\xc3\xa1 existi um usu\xc3\xa1rio com este e-mail cadastrado');\n }\n});\n\nconst create =\n session.run(\n `CREATE (n:User {name: '${userName}', email: '${userEmail}', password: '${userPassword}'})\n RETURN n`\n );\n\n create.then(result => {\n session.close();\n \n const singleRecord = result.records[0];\n const node = singleRecord.get(0);\n \n res.send(`Usu\xc3\xa1rio ${userName} cadastrado com sucesso`)\n\n driver.close();\n});\n};\nRun Code Online (Sandbox Code Playgroud)\n
会话是轻量级对象,专为一次运行单个查询而设计。
\n我猜你在检查createUser后就打电话了alreadyRegistered。由于这些是异步调用,您会无意中在同一会话中同时执行两个查询。
要解决此问题,如果您不能保证/不希望串行执行查询,则需要为数据库中运行的每个新查询创建一个新会话:
\nconst session = this.driver.session();\nconst results = session.run(/*...*/);\n\nresults.then(async results => {\n session.close();\n /*...*/\n })\n\nRun Code Online (Sandbox Code Playgroud)\n此处的 api 对此进行了解释: https: //github.com/neo4j/neo4j-javascript-driver/commit/a6ed396a31c4c2e6420218792172fc5535b8e4e1
\n相关问题:https://github.com/neo4j/neo4j-javascript-driver/issues/306#issuecomment-366931341
\n另外,请确保在对 进行查询之前等待alreadyRegistered查询完成createUser。使用 async/await 比.then到处链接更容易:
const result = await alreadyRegistered();\nif(result.records.length){\n res.send(\'J\xc3\xa1 existi um usu\xc3\xa1rio com este e-mail cadastrado\');\n}\n\nconst user = await createUser();\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
3297 次 |
| 最近记录: |