Hapi 是一个 Node.js 的 Web 框架,它可以帮助我们快速地创建 REST API 接口。在本文中,我们将学习如何使用 Hapi 创建一个 REST API,同时我们将讨论 Hapi 的一些特性,以便更好地理解它的工作原理。
安装 Hapi
在使用 Hapi 创建 REST API 之前,首先需要安装这个框架。可以使用 npm 进行安装:
npm install @hapi/hapi
我们还可以选择使用 Hapi 的命令行工具 hapi
,它可以帮助我们创建和管理 Hapi 项目。要使用 hapi
命令行工具,请使用以下命令进行全局安装:
npm install -g @hapi/cli
创建一个简单的 REST API
现在我们已经安装了 Hapi,接下来让我们创建一个简单的 REST API。
在创建 REST API 之前,我们需要创建一个 Hapi 服务器。我们可以使用以下代码来创建一个服务器实例:
-- -------------------- ---- ------- ----- ---- - ---------------------- ----- ------ - ------------- ----- ----- ----- ----------- --- -------------- ------- ------ ----- ---- -------- --------- -- -- - ------ ------- -------- - --- ----- -------- ------ - ----- --------------- ------------------- ------- -- --------------------- -- -------
这段代码会创建一个服务器实例,并监听端口 3000。我们还定义了一个路由,该路由指定了 HTTP GET 方法和 /
路径,并使用 handler
函数来处理此路由。
handler
函数接收两个参数:request
和 h
。request
对象包含 HTTP 请求的信息,h
参数是一个响应工具箱,用于构造 HTTP 响应。在这个例子中,我们只是返回了一个字符串 Hello, World!
作为服务器的响应体。
使用以下命令启动服务器:
node app.js
然后我们可以在浏览器中访问 http://localhost:3000,应该可以看到我们刚刚返回的字符串。
处理路由
在上面的示例中,我们只创建了一个路由处理程序来处理 HTTP GET 方法。但是,Hapi 允许我们定义多个路由,并使用不同的 HTTP 方法。
创建一个路由的方法是使用 server.route()
方法,该方法接收一个对象作为参数,该对象包含以下属性:
method
:HTTP 请求方法,例如 GET、POST 等。path
:请求路径。handler
:对此路由的处理函数。
以下是一个更完整的例子,它定义了三个不同的路由处理程序来处理 HTTP GET、POST 和 DELETE 方法:
-- -------------------- ---- ------- -------------- - ------- ------ ----- ---- -------- --------- -- -- - ------ ------- -------- - -- - ------- ------- ----- ---- -------- --------- -- -- - ----- ------- - ---------------- ------ ------- ------------------ - -- - ------- --------- ----- ---- -------- --------- -- -- - ------ ----------- - - ---
路由参数
有时我们需要从路径中获取参数,例如,在请求的路径中包含一个动态参数。Hapi 允许我们定义参数化路径,使用花括号 {}
括起来,例如 /users/{id}
。
定义带有参数的路径的示例如下:
server.route({ method: 'GET', path: '/users/{id}', handler: (request, h) => { const id = request.params.id; return `User ${id}`; } });
在这里,我们定义了一个路径 /users/{id}
,其中 {id}
表示动态参数。在处理程序中,我们使用 request.params.id
获取参数的值。
查询参数
除了路径参数外,我们还可以从查询字符串中获取参数。查询字符串是在 URL 中问号 ?
后面的键值对列表,例如 ?name=John&age=30
。
Hapi 允许我们使用 request.query
对象来获取查询字符串中的参数。以下是一个查询字符串示例:
server.route({ method: 'GET', path: '/search', handler: (request, h) => { const query = request.query; return `Search query: ${query.q}`; } });
在这里,我们在路径中定义了一个名为 /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