创建新项目
本教程将引导您使用 Neo4j GraphQL 库创建一个新项目。
本教程将向您展示如何
-
安装 Neo4j GraphQL 库及其依赖项。
-
设置表示图数据库结构的类型定义。
-
启动库实例以生成 GraphQL 模式。
-
运行服务器实例以对您的模式执行查询和变异。
本教程假设您熟悉命令行和 JavaScript,并且还安装了最新版本的 Node.js。示例使用默认的 npm
包管理器,但您可以使用其他任何您选择的管理器。
创建新项目
-
创建一个新目录并
cd
到其中mkdir neo4j-graphql-example cd neo4j-graphql-example
-
创建一个新的 Node.js 项目(使用 es6 选项启用 ESM 模块)
npm init es6 --yes
-
创建一个空的
index.js
文件,其中将包含本教程的所有代码touch index.js
安装依赖项
-
安装 Neo4j GraphQL 库及其依赖项
-
@neo4j/graphql
:官方 Neo4j GraphQL 库包。它获取您的 GraphQL 类型定义并生成一个由 Neo4j 数据库支持的模式。 -
graphql
:用于生成模式并执行查询和变异的包。 -
neo4j-driver
:JavaScript 的官方 Neo4j 驱动程序包,必须将其实例传递到 Neo4j GraphQL 库中。
-
-
安装一个 GraphQL 服务器包来托管您的模式并允许对其执行查询和变异。
-
用于 Apollo Server 的默认包是
@apollo/server
npm install @neo4j/graphql graphql neo4j-driver @apollo/server
-
设置 GraphQL 类型定义
Neo4j GraphQL 库主要由类型定义驱动,这些类型定义映射到 Neo4j 数据库中的节点和关系。要开始,请使用一个简单的示例,其中包含两个节点类型,一个带有标签“Actor”,另一个带有标签“Movie”
-
在您选择的编辑器中打开之前创建的
index.js
并编写您的类型定义。添加所有必要的包导入import { ApolloServer } from '@apollo/server'; import { startStandaloneServer } from '@apollo/server/standalone'; import { Neo4jGraphQL } from "@neo4j/graphql"; import neo4j from "neo4j-driver"; const typeDefs = `#graphql type Movie { title: String actors: [Actor!]! @relationship(type: "ACTED_IN", direction: IN) } type Actor { name: String movies: [Movie!]! @relationship(type: "ACTED_IN", direction: OUT) } `;
请注意,这些类型定义仅 **定义** 节点标签“Actor”和“Movie”,以及两者之间的“ACTED_IN”关系。生成模式后,您就可以执行
actors
和movies
的查询以从数据库中读取数据。 -
或者,您还可以通过 内省模式从现有数据库自动生成类型定义。
创建 Neo4jGraphQL
的实例
要创建 Neo4j GraphQL 库的实例,您需要一个 Neo4j 驱动程序来连接到您的数据库。
使用 AuraDB
-
对于 AuraDB 数据库,请 创建实例。
-
确保在实例准备就绪并显示类似于以下内容的连接 URI 后保存生成的密码:
使用 Neo4j 数据库
对于位于默认“neo4j://localhost:7687”(有关 端口配置的更多信息)的数据库,用户名为“username”,密码为“password”,请将以下内容添加到 index.js
文件的底部
const driver = neo4j.driver(
"neo4j://localhost:7687",
neo4j.auth.basic("username", "password")
);
const neoSchema = new Neo4jGraphQL({ typeDefs, driver });
创建 ApolloServer
的实例
要使用生成的模式创建 Apollo Server 实例,您可以在其中执行针对它的查询,请将以下内容添加到 index.js
的底部
const server = new ApolloServer({
schema: await neoSchema.getSchema(),
});
const { url } = await startStandaloneServer(server, {
listen: { port: 4000 },
});
console.log(`🚀 Server ready at ${url}`);
启动服务器
确保您的 index.js
文件如下所示
import { ApolloServer } from '@apollo/server';
import { startStandaloneServer } from '@apollo/server/standalone';
import { Neo4jGraphQL } from "@neo4j/graphql";
import neo4j from "neo4j-driver";
const typeDefs = `#graphql
type Movie {
title: String
actors: [Actor!]! @relationship(type: "ACTED_IN", direction: IN)
}
type Actor {
name: String
movies: [Movie!]! @relationship(type: "ACTED_IN", direction: OUT)
}
`;
const driver = neo4j.driver(
"neo4j://localhost:7687",
neo4j.auth.basic("username", "password")
);
const neoSchema = new Neo4jGraphQL({ typeDefs, driver });
const server = new ApolloServer({
schema: await neoSchema.getSchema(),
});
const { url } = await startStandaloneServer(server, {
context: async ({ req }) => ({ req }),
listen: { port: 4000 },
});
console.log(`🚀 Server ready at ${url}`);
您已准备好启动 GraphQL 服务器。回到命令行,运行
node index.js
如果成功,您应该会看到以下输出
🚀 Server ready at http://localhost:4000/
地址 http://localhost:4000/ 是 Apollo Server 启动的 URL。
在数据库中创建节点
-
在您的网络浏览器中访问 http://localhost:4000/。您应该会重定向到 Apollo Sandbox
-
目前您的数据库是空的。要开始添加数据,请将以下变异复制并粘贴到“操作”面板以在该电影中创建一部电影和一位演员
mutation { createMovies( input: [ { title: "Forrest Gump" actors: { create: [{ node: { name: "Tom Hanks" } }] } } ] ) { movies { title actors { name } } } }
-
单击右上角的“运行”按钮。您应该会在“响应”面板中收到以下确认,确认数据已创建在数据库中
{ "data": { "createMovies": { "movies": [ { "title": "Forrest Gump", "actors": [ { "name": "Tom Hanks" } ] } ] } } }
-
查询您刚刚添加的数据。将以下查询复制并粘贴到“操作”面板
query { movies { title actors { name } } }
由于您只创建了一个“Movie”节点和一个“Actor”,因此“响应”面板显示以下内容
{ "data": { "movies": [ { "title": "Forrest Gump", "actors": [ { "name": "Tom Hanks" } ] } ] } }
结论
本教程到此结束。到目前为止,您应该已经拥有一个连接到 Neo4j 数据库的 GraphQL API,并且您已向其中添加了两个节点。
要了解更多信息,请继续阅读有关 查询和聚合的文档,或者了解如何使用 Neo4j GraphQL 工具箱。有关更高级的数据库设置,请参阅 驱动程序配置页面。
在 GraphAcademy 上的 GraphQL 课程中获得实践经验。