Hapi 应用中的请求与响应处理及相关知识点详解

阅读时长 9 分钟读完

Hapi 是一个 Node.js 的服务器框架,用于构建可维护、可扩展、高度测试的应用程序。在 Hapi 应用中,请求和响应处理是非常重要的部分,我们需要了解相关知识点来编写高品质的 Hapi 应用。

请求处理

Hapi 应用中的请求处理包含以下几个方面:

路由配置

Hapi 应用通过路由配置来确定应用程序如何响应特定的请求。路由配置包括路由路径、HTTP 方法、处理程序等信息,可以使用 Joi 进行结构验证。

以下是 Hapi 应用中的一个路由配置例子:

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

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

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

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

在这个例子中,我们为 GET 方法的 /hello/{name} 路径配置了一个处理程序,当用户请求这个路径时,应用程序会返回一个欢迎信息,其中包含用户提供的名称参数 name

请求对象

请求对象是每个传入 HTTP 请求所创建的对象,它包含与请求相关的所有信息,包括 URL、HTTP 方法、请求头、请求有效负载等。Hapi 请求对象除了 Node.js 核心 http.IncomingMessage 类提供的方法外,还提供了许多方便的扩展属性和方法,如 request.queryrequest.payloadrequest.state 等,用于访问请求参数、请求有效负载及 cookie、头信息等。

以下是 Hapi 请求对象的一些常用属性:

  • request.method - HTTP 方法
  • request.path - 请求 URL 路径
  • request.url - 请求 URL 对象
  • request.headers - 请求头
  • request.params - 路径参数
  • request.query - 查询参数
  • request.payload - 请求有效负载
  • request.state - request 的 cookies

以下是 Hapi 请求对象的一些常用方法:

  • request.log() - 记录请求信息
  • request.is(['json', 'html']) - 检查请求的 MIME 类型是否与提供的值匹配
  • request.match() - 检查路径与请求匹配的路由定义
  • request.cookieAuth.test() - 检查授权插件是否为路由启用

身份验证与授权

在 Hapi 应用中,身份验证和授权也是很重要的部分。Hapi 提供了一组功能强大的扩展点,用于在路由配置中指定身份验证和授权需求,并启用相应的插件来执行其操作。

以下是 Hapi 身份验证和授权配置的一个例子:

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

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

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

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

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

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

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

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

在这个例子中,我们设置了一个使用 bcrypt 哈希存储加密密码的用户列表和一个 validate 函数,该函数检查用户提供的用户名和密码是否正确。然后,我们通过 @hapi/basic 插件注册了一个基本的身份验证插件,并将其设置为默认策略。最后,我们在路由配置中指定了一个需要授权的路由,并配置了所需的作用域。

响应处理

Hapi 应用中的响应处理与请求处理的几个方面相对应,包括路由处理程序、响应对象和渲染视图等。

路由处理程序

路由处理程序是 Hapi 应用中用于处理特定请求的函数。在处理程序中,我们可以使用 h.response() 函数来创建一个新的响应对象,设置状态码、头信息以及有效载荷数据等。

以下是 Hapi 应用中一个处理程序的例子:

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

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

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

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

在这个例子中,我们设置了一个简单的路由及处理程序,该处理程序返回一个新的响应对象,并设置了自定义头信息。

响应对象

响应对象是 Hapi 应用中响应请求的对象,包含响应状态码、头信息、有效负载等。与请求对象类似,Hapi 响应对象也提供了许多方便的扩展属性和方法,如 response.statusCoderesponse.headerresponse.type 等。

以下是 Hapi 响应对象的一些常用属性:

  • response.statusCode - 响应状态码
  • response.header() - 添加响应头信息
  • response.type() - 设置响应内容类型
  • response.encoding() - 设置响应内容编码
  • response.state() - 设置响应 cookie

以下是 Hapi 响应对象的一些常用方法:

  • response.code() - 设置状态码
  • response.headers() - 添加一组响应头信息
  • response.type() - 设置响应内容类型
  • response.encoding() - 设置响应内容编码
  • response.state() - 设置响应 cookie

渲染视图

Hapi 应用程序通常需要渲染 HTML 页面来呈现响应给用户。为此,Hapi 提供了一组视图渲染插件,允许我们为应用程序设置多个视图引擎,如 Handlebars、Pug 等。

以下是 Hapi 应用中一个使用 Handlebars 视图引擎的路由配置例子:

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

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

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

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

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

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

在这个例子中,我们在路由配置中注册了视图插件,在 server.views() 方法中设置了 Handlebars 引擎,指定了视图文件存储的路径,然后在一个 GET 路由处理程序中使用 h.view() 方法来呈现 HTML 视图,并传递数据到模板中。

结论

Hapi 应用中的请求和响应处理是非常重要的部分。在本文中,我们介绍了它们的一些关键方面,包括路由配置、请求对象、身份验证和授权、处理程序、响应对象和渲染视图等。通过深入了解它们,我们将能够编写更高品质和更可维护的 Hapi 应用程序。

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

纠错
反馈