实例教程:如何在 Node.js 项目中使用 GraphQL?

阅读时长 13 分钟读完

GraphQL 是一种用于 API 的查询语言和运行时环境,它可以让客户端精确地按需请求数据并获得只想要的数据,从而解决了 REST API 中某些困难和限制。在前端开发领域中,GraphQL 呈现出越来越多的使用和发展潜力,对于前端开发人员来说,如何在 Node.js 项目中使用 GraphQL 是一个基本的技能点。

在本文中,我们将详细介绍如何在 Node.js 项目中使用 GraphQL,包括如何安装 GraphQL,如何定义模型和类型,以及如何查询和变异数据等技术相关的内容。

安装 GraphQL 和依赖

在使用 GraphQL 之前,我们需要先安装它及其依赖。在 Node.js 项目中,可以通过 npm 或 yarn 来安装 GraphQL 和 GraphQL 相关模块。在命令行中,执行以下命令:

或:

在上述命令中,我们安装了 graphql、express 和 express-graphql 模块,其中 graphql 模块包含了所有的 GraphQL API,express 模块用于搭建网站和服务,而 express-graphql 模块是一个 Express 中间件,它可以为提供 GraphQL 服务,也可以通过内置的 GraphiQL 界面,便于用户进行调试和测试。在后面的教程中,我们会进一步讲解这些模块的使用方法。

定义 GraphQL 模型和类型

在使用 GraphQL 的过程中,我们需要先定义我们要访问的数据的数据类型和数据模型。在 GraphQL 中,我们使用 typeschema 来分别定义数据类型和数据模型。

在本文中,我们以一个简单的博客系统为例,来说明如何定义 GraphQL 的模型和类型。

数据类型

我们需要先定义我们要访问的数据类型。在博客系统中,我们可能需要访问博客文章、评论、用户等数据,因此我们需要分别定义这些数据的类型。在 GraphQL 中,我们可以使用 type 关键字来定义类型,如下所示:

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

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

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

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

在上述代码中,我们分别定义了 UserTypeBlogTypeCommentType,它们分别代表了博客系统中的用户、文章和评论类型。在每个类型中,我们使用 GraphQLNonNull 来标识每个对象的必要属性,如果为空,则会抛出错误信息。我们还使用 GraphQLList 来定义列表类型,表示一个对象包含多个子对象。

在每个类型中,我们还定义了 fields 属性,这个属性是一个函数,用于定义每个对象类型的属性,每个属性的名称、类型和描述等,这些信息可以帮助客户端准确地了解每个对象的属性,从而更好地查询和操作数据。

数据模型

在定义完数据类型之后,我们需要使用数据模型来描述数据之间的关系,以及如何查询、变异数据等。在博客系统中,我们使用数据模型来描述文章、用户和评论之间的关系。

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

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

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

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

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

在上述代码中,我们定义了 RootQueryTypeRootMutationType 两个数据模型,分别用于查询和变异数据。在 RootQueryType 中,我们定义了 usersblogscomments 三个属性,用于查询用户、文章和评论信息,其中 blogscomments 的查询参数支持 authorId,可以根据不同的 id 查询对应的数据,这可以让我们更好地查询和组织数据。在 RootMutationType 中,我们定义了 createUsercreateBlogcreateComment 三个属性,用于创建用户、文章和评论信息,这些操作会改变数据库中的数据,因此需要定义在变异类型中。

创建 GraphQL API 服务

在定义好数据类型和数据模型之后,我们需要将它们转化为 GraphQL API 服务,以供客户端进行查询和变异等操作。在 Node.js 中,我们可以使用 Express 框架来搭建 GraphQL API 服务,具体方法如下所示:

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

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

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

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

在上述代码中,我们使用了 graphqlHTTP 中间件来创建 GraphQL API 服务,其中 schema 参数代表了我们定义好的数据模型和类型,graphiql 参数代表了 GraphQL 内置调试工具 GraphiQL 是否可用,如果设置为 true,则可以使用 GraphiQL 来调试和测试 API,提升开发效率和体验。

查询和变异数据

在创建好 GraphQL API 服务之后,我们就可以开始查询和变异数据了。对于查询数据,我们可以访问定义好的模型和类型,根据查询参数获取特定的数据,下面是一个查询用户的例子:

在上述代码中,我们通过 users 属性来查询所有用户的信息,获取每个用户的 id、name 和 email。

对于变异数据,我们需要使用定义好的变异类型,创建新的数据并提交到数据库中,如下所示:

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

在上述代码中,我们通过 createUser 属性来创建一个名为 "lucy" 的新用户,并设置其 email 和 password,创建成功后,我们可以查看新用户的 id、name 和 email 等信息。

总结

在本文中,我们详细介绍了如何在 Node.js 项目中使用 GraphQL,包括安装 GraphQL、定义数据类型和模型,以及查询和变异数据等方面的内容。使用 GraphQL 可以让我们更好地组织数据和查询数据,并且可以提高客户端的数据访问效率和用户体验。希望这篇文章对您学习和使用 GraphQL 有所帮助,如果您有任何问题或建议,请随时与我们联系。

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

纠错
反馈