创建新项目

本教程将引导您使用 Neo4j GraphQL 库创建一个新项目。

本教程将向您展示如何

  • 安装 Neo4j GraphQL 库及其依赖项。

  • 设置表示图数据库结构的类型定义。

  • 启动库实例以生成 GraphQL 模式。

  • 运行服务器实例以对您的模式执行查询和变异。

本教程假设您熟悉命令行和 JavaScript,并且还安装了最新版本的 Node.js。示例使用默认的 npm 包管理器,但您可以使用其他任何您选择的管理器。

创建新项目

  1. 创建一个新目录并 cd 到其中

    mkdir neo4j-graphql-example
    cd neo4j-graphql-example
  2. 创建一个新的 Node.js 项目(使用 es6 选项启用 ESM 模块)

    npm init es6 --yes
  3. 创建一个空的 index.js 文件,其中将包含本教程的所有代码

    touch index.js

安装依赖项

  1. 安装 Neo4j GraphQL 库及其依赖项

    1. @neo4j/graphql:官方 Neo4j GraphQL 库包。它获取您的 GraphQL 类型定义并生成一个由 Neo4j 数据库支持的模式。

    2. graphql:用于生成模式并执行查询和变异的包。

    3. neo4j-driver:JavaScript 的官方 Neo4j 驱动程序包,必须将其实例传递到 Neo4j GraphQL 库中。

  2. 安装一个 GraphQL 服务器包来托管您的模式并允许对其执行查询和变异。

    1. 用于 Apollo Server 的默认包是 @apollo/server

      npm install @neo4j/graphql graphql neo4j-driver @apollo/server
  3. 设置 Neo4j 数据库。确保它满足 要求,包括必要的插件。

设置 GraphQL 类型定义

Neo4j GraphQL 库主要由类型定义驱动,这些类型定义映射到 Neo4j 数据库中的节点和关系。要开始,请使用一个简单的示例,其中包含两个节点类型,一个带有标签“Actor”,另一个带有标签“Movie”

  1. 在您选择的编辑器中打开之前创建的 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”关系。生成模式后,您就可以执行 actorsmovies 的查询以从数据库中读取数据。

  2. 或者,您还可以通过 内省模式从现有数据库自动生成类型定义。

创建 Neo4jGraphQL 的实例

要创建 Neo4j GraphQL 库的实例,您需要一个 Neo4j 驱动程序来连接到您的数据库。

使用 AuraDB

  1. 对于 AuraDB 数据库,请 创建实例

  2. 确保在实例准备就绪并显示类似于以下内容的连接 URI 后保存生成的密码:

    neo4j aura dashboard

使用 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。

在数据库中创建节点

  1. 在您的网络浏览器中访问 http://localhost:4000/。您应该会重定向到 Apollo Sandbox

    apollo server landing page
  2. 目前您的数据库是空的。要开始添加数据,请将以下变异复制并粘贴到“操作”面板以在该电影中创建一部电影和一位演员

    mutation {
      createMovies(
        input: [
          {
            title: "Forrest Gump"
            actors: { create: [{ node: { name: "Tom Hanks" } }] }
          }
        ]
      ) {
        movies {
          title
          actors {
            name
          }
        }
      }
    }
  3. 单击右上角的“运行”按钮。您应该会在“响应”面板中收到以下确认,确认数据已创建在数据库中

    {
      "data": {
        "createMovies": {
          "movies": [
            {
              "title": "Forrest Gump",
              "actors": [
                {
                  "name": "Tom Hanks"
                }
              ]
            }
          ]
        }
      }
    }
  4. 查询您刚刚添加的数据。将以下查询复制并粘贴到“操作”面板

    query {
      movies {
        title
        actors {
          name
        }
      }
    }

    由于您只创建了一个“Movie”节点和一个“Actor”,因此“响应”面板显示以下内容

    {
      "data": {
        "movies": [
          {
            "title": "Forrest Gump",
            "actors": [
              {
                "name": "Tom Hanks"
              }
            ]
          }
        ]
      }
    }

结论

本教程到此结束。到目前为止,您应该已经拥有一个连接到 Neo4j 数据库的 GraphQL API,并且您已向其中添加了两个节点。

要了解更多信息,请继续阅读有关 查询和聚合的文档,或者了解如何使用 Neo4j GraphQL 工具箱。有关更高级的数据库设置,请参阅 驱动程序配置页面。

GraphAcademy 上的 GraphQL 课程中获得实践经验。