npm 包 graphql-start 使用教程

阅读时长 7 分钟读完

介绍

graphql-start 是一个用于快速搭建 GraphQL 服务的 npm 包。它封装了一个可扩展的 GraphQL 服务框架,并且提供了命令行工具,方便我们快速初始化项目,并自由定制我们的 GraphQL 服务。本文将为大家介绍如何使用 graphql-start 来搭建自己的 GraphQL 服务。

安装

全局安装 graphql-start

初始化项目

使用 graphql-start 命令创建项目:

比如:

这个命令会创建一个名为 my-graphql-app 的目录,里面的内容是一个初始的 GraphQL 服务应用程序。打开 my-graphql-app 目录:

我们看到一些目录和文件:

-- -------------------- ---- -------
-
--- ------------
--- -----------------
--- ------------
--- ---
    --- --------
    --- ------------
    --- ---------
    --- --------

其中:

  • node_modules:存放项目依赖的第三方包。
  • package-lock.json:锁定依赖包的版本,以便重复安装。
  • package.json:包含项目的描述信息和依赖。
  • src:存放源代码。

其中,index.js 是应用程序的启动文件,resolvers.js 包含了我们的 GraphQL 查询和修改的逻辑,schema.js 包含了我们的 GraphQL 类型和权限规则,utils.js 是一些公共方法。我们接下来会对这些文件进行说明。

编写 GraphQL 请求

打开 resolvers.js 文件,在里面编写 GraphQL 查询和修改(也叫 mutation)的逻辑。比如,编写一个查询学生的方法 student,在学生数据库中查找对应的学生:

这段代码定义了一个 student 方法,它接收一个 id 参数,然后调用 studentAPI.getStudent(id) 方法来查找学生。dataSources 参数是一个包含了所有数据源的对象,我们通过该对象来访问学生数据库。我们后面会说明如何设置数据源。

定义 GraphQL 类型

打开 schema.js 文件,在里面定义 GraphQL 类型和权限规则。比如,定义一个学生类型,它有 idnamescore 三个字段:

-- -------------------- ---- -------
----- -------- - ----
  ---- ------- -
    --- -------
    ----- -------
    ------ ---
  -

  ---- ----- -
    ----------- --------- --------
  -
--

这段代码用 GraphQL Schema Language 定义了一个 Student 类型,它有三个字段,分别是 idnamescoreQuery 类型是 GraphQL 中的一种特殊类型,它定义了可查询的字段。我们在其中定义了一个 student 字段,它接收 id 参数,返回 Student 类型的学生对象。

添加数据源

graphql-start 自带了一些数据源实现,比如 REST 数据源、MongoDB 数据源、PostgreSQL 数据源等。我们可以选择其中一种或多种数据源来实现我们的数据获取逻辑。

以 MongoDB 数据源为例,我们需要首先安装 mongodbgraphql-datasource-mongodb 两个 npm 包:

然后,在 utils.js 文件中,添加 MongoDB 数据源:

-- -------------------- ---- -------
----- - --------------- - - --------------------------------------

----- ---------- ------- --------------- -
  ----- -------------- -
    -- ----
    ----- ------- - ----- ---------------------
    -- ---------- -
      ----- --- ---------- -- - ----- ------
    -
    ------ --------
  -
-

-------------- - -
  -----------
--

这段代码定义了 StudentAPI 类,它继承自 MongoDataSource 类。然后,定义了 getStudent 方法,该方法使用 this.findOneById(id) 来查找指定 id 的学生。findOneById 方法是 MongoDataSource 类的方法,它实现了从 MongoDB 中查询数据的逻辑。

最后,我们导出 StudentAPI 类,以便在 resolvers.js 中使用数据源:

-- -------------------- ---- -------
----- - ---------- - - -------------------

----- ------ - --- --------------
  ---------
  ----------
  ------------ -- -- --
    ----------- --- -------------
  ---
---

我们在 ApolloServerdataSources() 方法中创建了一个 StudentAPI 实例,将其赋值给 studentAPI 属性。这样,在 resolvers.js 中,我们就可以通过 dataSources.studentAPI 来访问学生 API,并调用 getStudent 方法查询学生。

启动应用程序

编写完整的代码后,我们就可以启动应用程序了。在项目根目录下执行以下命令:

这个命令会在 http://localhost:4000/ 启动一个 GraphQL 服务,我们可以在 GraphQL Playground 中进行查询、修改等操作。

示例代码

下面是完整的示例代码,可以放在 resolvers.js 文件中:

-- -------------------- ---- -------
----- - ---------- - - -------------------

----- --------- - -
  ------ -
    -------- ------ - -- -- - ----------- -- -- -
      ------ --------------------------------------
    --
  --
--

----- -------- - ----
  ---- ------- -
    --- -------
    ----- -------
    ------ ---
  -

  ---- ----- -
    ----------- --------- --------
  -
--

----- ------ - --- --------------
  ---------
  ----------
  ------------ -- -- --
    ----------- --- -------------
  ---
---

----------------------- --- -- -- -
  --------------- ------ ----- -- ---------
---

下面是完整的示例代码,可以放在 schema.js 文件中:

-- -------------------- ---- -------
----- -------- - ----
  ---- ------- -
    --- -------
    ----- -------
    ------ ---
  -

  ---- ----- -
    ----------- --------- --------
  -
--

结束语

本文为大家介绍了 graphql-start 的使用方法,包括初始化项目、编写 GraphQL 查询和修改、定义 GraphQL 类型和权限规则、添加数据源和启动应用程序等。我们还对每个步骤进行了详细的说明,并给出了示例代码。希望能帮助大家快速上手 GraphQL 开发。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60055ff481e8991b448ddbf2

纠错
反馈