如何使用 Hapi 创建一个 REST API

阅读时长 7 分钟读完

Hapi 是一个 Node.js 的 Web 框架,它可以帮助我们快速地创建 REST API 接口。在本文中,我们将学习如何使用 Hapi 创建一个 REST API,同时我们将讨论 Hapi 的一些特性,以便更好地理解它的工作原理。

安装 Hapi

在使用 Hapi 创建 REST API 之前,首先需要安装这个框架。可以使用 npm 进行安装:

我们还可以选择使用 Hapi 的命令行工具 hapi,它可以帮助我们创建和管理 Hapi 项目。要使用 hapi 命令行工具,请使用以下命令进行全局安装:

创建一个简单的 REST API

现在我们已经安装了 Hapi,接下来让我们创建一个简单的 REST API。

在创建 REST API 之前,我们需要创建一个 Hapi 服务器。我们可以使用以下代码来创建一个服务器实例:

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

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

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

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

-------

这段代码会创建一个服务器实例,并监听端口 3000。我们还定义了一个路由,该路由指定了 HTTP GET 方法和 / 路径,并使用 handler 函数来处理此路由。

handler 函数接收两个参数:requesthrequest 对象包含 HTTP 请求的信息,h 参数是一个响应工具箱,用于构造 HTTP 响应。在这个例子中,我们只是返回了一个字符串 Hello, World! 作为服务器的响应体。

使用以下命令启动服务器:

然后我们可以在浏览器中访问 http://localhost:3000,应该可以看到我们刚刚返回的字符串。

处理路由

在上面的示例中,我们只创建了一个路由处理程序来处理 HTTP GET 方法。但是,Hapi 允许我们定义多个路由,并使用不同的 HTTP 方法。

创建一个路由的方法是使用 server.route() 方法,该方法接收一个对象作为参数,该对象包含以下属性:

  • method:HTTP 请求方法,例如 GET、POST 等。
  • path:请求路径。
  • handler:对此路由的处理函数。

以下是一个更完整的例子,它定义了三个不同的路由处理程序来处理 HTTP GET、POST 和 DELETE 方法:

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

路由参数

有时我们需要从路径中获取参数,例如,在请求的路径中包含一个动态参数。Hapi 允许我们定义参数化路径,使用花括号 {} 括起来,例如 /users/{id}

定义带有参数的路径的示例如下:

在这里,我们定义了一个路径 /users/{id},其中 {id} 表示动态参数。在处理程序中,我们使用 request.params.id 获取参数的值。

查询参数

除了路径参数外,我们还可以从查询字符串中获取参数。查询字符串是在 URL 中问号 ? 后面的键值对列表,例如 ?name=John&age=30

Hapi 允许我们使用 request.query 对象来获取查询字符串中的参数。以下是一个查询字符串示例:

在这里,我们在路径中定义了一个名为 /search 的路由,当请求到达此路由时,我们从 request.query 中获取查询字符串中的参数。

错误处理

在开发 REST API 时,很重要的一点是正确地处理错误。Hapi 为错误处理提供了很好的支持。例如,我们可以使用 Boom 模块创建错误对象,该对象包含一些标准属性,例如错误消息和状态码。

以下是一个示例,它演示了如何使用 Boom 模块创建错误对象:

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

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

在这里,我们在处理程序中创建了一个错误对象,该对象包含错误消息 User not found 和状态码 404。然后我们通过 throw 语句将错误抛出。当错误被抛出时,Hapi 会捕获它并返回一个合适的 HTTP 响应。

当然,我们也可以使用 Hapi 的错误处理程序来自定义错误响应:

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

在这里,我们使用 server.ext() 方法注册了一个 pre-response 处理程序。当服务器发送响应之前,该程序将拦截响应并检查响应状态码是否为 404。如果是,我们将返回一个自定义响应。

结论

在本文中,我们学习了如何使用 Hapi 框架创建 REST API 接口。我们讨论了 Hapi 的一些特性,例如路由处理、路由参数、查询参数和错误处理。现在您已经知道如何使用 Hapi 框架,可以开始创建自己的 REST API 更加详细和复杂的接口。

完整代码示例:https://github.com/hapijs/hapi

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

纠错
反馈