创建新项目

这是 GraphQL 程序库 7 版的文档。如需长期支持 (LTS) 版本 5 的文档,请参阅 GraphQL 程序库 5 LTS 版

本教程将指导您如何使用 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:官方的 Neo4j JavaScript 驱动程序包,其一个实例必须传递给 Neo4j GraphQL 程序库。

  2. 安装一个 GraphQL 服务器包,以托管您的模式并允许针对其执行查询和修改。

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

      npm install @neo4j/graphql@alpha 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 @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”。模式生成后,您可以执行 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 @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。

在数据库中创建节点

  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 课程进行实践操作。

© . All rights reserved.