Hapi 路由实现及最佳实践

阅读时长 7 分钟读完

Hapi 是一个流行的 Node.js Web 应用程序框架,它提供了很多有用的功能,如路由、插件、缓存等。在这篇文章中,我们将重点关注 Hapi 路由的实现及最佳实践。

基础路由配置

在 Hapi 中,路由是通过配置路由对象来创建的。每个路由对象都定义了如何响应请求,并指定了请求的 HTTP 方法、路径和处理程序等。下面是一个简单的路由配置示例:

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

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

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

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

在上面的示例中,我们创建了一个 Hapi 服务器并定义了一个路由对象。该路由对象指定了 HTTP GET 方法、路径为根路径 /、处理程序返回字符串 'Hello, world!'。然后我们将该路由对象添加到服务器中,最后启动服务器。

路径参数

在实际应用程序中,我们通常需要使用路径参数来处理动态路径。在 Hapi 中,路径参数可以通过使用花括号包裹在路径中来指定。Hapi 会自动将路径参数解析为路由处理程序的参数。下面是一个例子:

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

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

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

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

在这个例子中,我们定义了一个路由对象,该对象指定了一个路径为 /users/{id} 的路由。当请求到达该路由时,路由处理程序会从请求参数中获取 id 属性,并生成一个响应字符串 'User ID: {id}'。

请求验证

在实际应用程序中,我们通常需要对请求进行验证来确保请求参数的正确性。在 Hapi 中,请求验证可以通过指定一个验证方案来实现。验证方案是一个配置对象,其中包含一个或多个验证方式。下面是一个示例:

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

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

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

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

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

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

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

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

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

在上面的示例中,我们首先定义了一个用户验证函数 validateUser,该函数根据请求参数验证用户并返回一个验证结果对象。然后我们定义了一个路由对象,该对象指定了 HTTP POST 方法、路径为 /users、处理程序将用户保存到数据库中。我们为该路由对象配置了验证方案和请求验证。验证方案采用了基本认证策略,用于验证用户。请求验证采用了用户模式,并验证了请求体的有效性。

错误处理

在 Hapi 中,错误处理是一个重要的主题。当处理程序或插件出现未处理的异常时,Hapi 会生成一个响应并处理该异常。可以通过配置默认错误处理程序来自定义错误响应。下面是一个示例:

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

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

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

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

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

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

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

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

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

在这个例子中,我们定义了一个抛出异常的处理程序。我们还定义了一个扩展点 onPreResponse,用于处理响应中的异常。如果错误不是 Boom 错误,则生成一个包含异常消息的 Boom 错误响应。最后,我们将路由对象添加到服务器中,并启动服务器。

总结

在本文中,我们详细介绍了 Hapi 路由的实现及最佳实践。我们首先介绍了基础路由配置,然后介绍了路径参数、请求验证和错误处理。使用这些技术,你可以轻松构建可靠、高性能的 Web 应用程序。

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

纠错
反馈