创建新项目
这是 GraphQL 程序库 7 版的文档。如需长期支持 (LTS) 版本 5 的文档,请参阅 GraphQL 程序库 5 LTS 版。 |
本教程将指导您如何使用 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
:官方的 Neo4j JavaScript 驱动程序包,其一个实例必须传递给 Neo4j GraphQL 程序库。
-
-
安装一个 GraphQL 服务器包,以托管您的模式并允许针对其执行查询和修改。
-
@apollo/server
是 Apollo Server 的默认包npm install @neo4j/graphql@alpha 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 @node { title: String actors: [Actor!]! @relationship(type: "ACTED_IN", direction: IN) } type Actor @node { 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 @node {
title: String
actors: [Actor!]! @relationship(type: "ACTED_IN", direction: IN)
}
type Actor @node {
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 课程进行实践操作。