npm 包 apollo-server-hapi 使用教程

阅读时长 6 分钟读完

在现代的互联网开发领域中,JavaScript 已经成为了其中一种不可或缺的语言。而前端开发作为其中的一部分,也是 JavaScript 的天下。在前端开发中,如果要实现数据的获取和传输,一般都是通过 AJAX 或者 Websocket 等技术来实现的。但是,随着 GraphQL 技术的出现,有一种新的方式可以让前端应用更加方便地获取和处理数据——GraphQL API 服务。

其中,Apollo 是一个知名的 GraphQL 解决方案,它提供了一套完整的 GraphQL 开发工具链,包括了服务器端和客户端的发展框架,以及一些相关模块和工具。而 apollo-server-hapi,就是 Apollo 中的一个重要子模块,它可以让你在 Hapi.js Web 框架上快速和无缝地搭建 GraphQL API 服务。下面,我们就来详细讲解一下 apollo-server-hapi 的使用方法和注意事项。

环境要求

  • Node.js 版本>=8.0
  • NPM 包管理器

安装

你可以直接通过 NPM 包管理器来安装 apollo-server-hapi:

快速上手

如果你已经了解了 GraphQL 和 Hapi.js 的基本用法,那么使用 apollo-server-hapi 构建 GraphQL API 服务就非常简单了。你只需要创建一个 Hapi.js 的服务器实例,然后将其作为 apollo-server-hapi 的参数。代码示例如下:

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

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

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

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

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

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

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

上面的代码中,我们定义了一个简单的 "hello world" GraphQL 查询,然后通过 Hapi.js 服务器将其暴露出去。其中,ApolloServer 实例是 apollo-server-hapi 的核心对象,它负责解析 GraphQL 请求并将其转换成符合定义的 Schema 的返回结果。在使用时,我们只需要将其 applyMiddleware 到 Hapi.js 服务器上即可。

配置和扩展

有时候,我们需要对 ApolloServer 的一些配置项进行调整或者扩展,来满足我们特定的业务需求。

缓存

默认情况下,ApolloServer 不会对 GraphQL 查询结果进行缓存。但是,对于某些查询数据量较大或者查询较为频繁的情况下,启用缓存会显著提高查询响应速度。可以通过在 ApolloServer 对象上定义 cache 参数来开启缓存,如下所示:

上面的代码中,我们启用了 InMemoryCache 缓存,并将其传递到了 ApolloServer 实例中。对于特定的场景,你也可以通过定义自己的缓存来替换 apollo-server 中的默认实现。

自定义请求头

有时候,我们需要在请求头中携带一些自定义信息,以便在后续的处理中使用。可以通过在 ApolloServer 对象上定义 context 参数来传递这些变量,如下所示:

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

上面的代码中,我们在 context 函数中获取了 request 对象,并从中提取了 authorization 这个自定义请求头。在后续的 Resolver 处理中,就可以通过 context 对象获取到这个变量值。

自定义路由

如果你需要对 ApolloServer 的请求路由进行自定义,比如修改 GraphQL API 的接口地址路径或者添加过滤器、内置鉴权等功能,就可以通过定义一个 Hapi.js 的路由来实现。

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

上面的代码中,我们通过 Hapi.js 的 route 方法定义了一个新路由。其中,handler 函数将请求和响应对象传递到 apollo-server-hapi 实例中进行处理。

结尾

到这里,我们就完成了对于 apollo-server-hapi 的入门学习。如果你已经熟悉了 GraphQL 和 Hapi.js 的基本用法,那么这些知识点应该是很容易理解和掌握的。在未来的前端开发中,如果需要构建 GraphQL API 服务,就可以选择 apollo-server-hapi 作为解决方案,并依据实际情况进行配置和扩展。感谢你的阅读!

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