Hapi 中的 API 控制器结构

Hapi 是一个构建 Node.js 应用程序的现代框架。它提供了处理路由、处理请求和响应、验证和安全性等一系列有用的工具。在本文中,我们将介绍 Hapi 中的 API 控制器结构,这对于构建稳健的 RESTful API 至关重要。

控制器是什么?

在 Hapi 中,控制器是处理特定资源 URI 的中心点。它们是应用程序中的一个功能组件,负责处理传入的请求并作出响应。它们是属于 MVC 模型中的 C - 控制器部分。

使用控制器的好处是简化代码逻辑和增强可读性,因为我们可以将逻辑分离到不同的组件中。这也使得我们可以轻松地重用代码和单元测试控制器逻辑。

控制器结构

在 Hapi 中,控制器是一个 JavaScript 模块。它负责处理请求并返回响应。通常,一个控制器需要完成以下三个步骤:

  1. 接收和解析请求
  2. 处理请求并返回资源或状态
  3. 发送响应

以下是一个简单的 Hapi 控制器示例,该控制器接受一个 GET 请求并返回一个 “Hello World” 的问候语。

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

在上面的示例中,我们将控制器命名为 hello,在控制器模块中定义了一个 hello 函数,并在其中处理请求。该函数有两个参数:requesthrequest 参数表示收到的 HTTP 请求对象,h 表示响应工具集合。

在这个例子中,我们只需要将一个字符串 “Hello World!” 作为响应返回即可。

但是这种方式并不够灵活,因为我们无法响应其他类型的数据或状态码。为此,我们需要对控制器进行一些改进。

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

在上面的示例中,我们使用 Hapi 提供的响应工具集合 h,创建了一个响应对象 response,并设置了响应类型和头信息。最后,我们将 response 对象返回。

控制器的最佳实践

以下是一些控制器的最佳实践,可帮助我们构建强大和可维护的 API。

1. 命名控制器

命名控制器对于代码库的可读性和维护性非常重要。我们应该使用语义化的命名方式来命名控制器函数。例如,如果我们编写的控制器路由是处理用户注册,则控制器名称可以是 registerUser

2. 控制器应该利用 Promise

控制器应该是异步的,并且应该返回 Promise。这有助于提高代码性能和可维护性。Promise 防止回调地狱,并帮助我们使用 try/catch 语句处理错误。

以下是一个具有 Promise 的控制器示例:

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

在上面的示例中,我们将控制器改为异步,并使用 try/catch 语句处理错误。我们还将 return 语句包装在一个 Promise 中,以使其更加健壮。

3. 控制器应该处理错误

控制器应该捕获并处理错误。我们可以使用 try/catch 语句,或使用 route.on('response', errorHandler) 处理 API 的全局错误。

以下是一个处理特定错误的控制器示例:

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

在上面的示例中,我们使用 try/catch 语句捕获错误,并检查其类型。如果错误是 ValidationError 类型,则返回带有 400 状态的响应,否则抛出错误。

总结

在 Hapi 中,控制器是处理特定资源 URI 的中心点。它们是应用程序中的一个功能组件,负责处理传入的请求并作出响应。使用控制器的好处是分离出逻辑,增强可读性和可维护性。我们应该命名控制器、使用 Promise 和处理错误,以构建强大和可维护的 API。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/664d5a1bd3423812e4cb64d4