使用@apollo/server时Neo4j查询无结果但浏览器执行正常
问题原因及解决办法
核心原因
你的代码中,Neo4j Driver默认连接的是neo4j默认数据库,但你的业务数据实际存储在非默认数据库中。这就导致调试时执行的Cypher查询的是空库,返回0条记录;而Neo4j浏览器里你已经切换到了正确的目标数据库,所以能正常查到结果。
解决办法
以下两种方式均可指定目标数据库,二选一即可:
方式1:创建Neo4jGraphQL实例时指定数据库
在初始化Neo4jGraphQL对象时,添加database参数,直接指定要连接的数据库名称:
const neoSchema = new Neo4jGraphQL({ typeDefs, driver, database: "你的目标数据库名" // 替换为实际的非默认数据库名称 });
方式2:通过Apollo上下文配置指定数据库
在启动Apollo Server时,为每个请求的Neo4j Session指定目标数据库:
const { url } = await startStandaloneServer(server, { listen: { port: 4000 }, context: async () => ({ session: driver.session({ database: "你的目标数据库名" }) // 替换为实际数据库名称 }), });
额外检查:确认Driver的用户名和密码拥有目标数据库的访问权限,避免因权限问题导致查询无结果。
内容的提问来源于stack exchange,提问作者Michael Hallabrin
相关产品推荐
相关产品推荐

