简介
Hapi 是 Node.js 中一个流行的框架,用于构建 RESTFul API。它提供了许多功能,包括路由、请求处理、输入验证、错误处理、缓存、插件等。它还提供了一个简单的插件系统,使得添加和使用插件变得非常容易。
在本文中,我们将介绍如何使用 Hapi 构建一个简单的 RESTFul API,包括路由、请求处理、输入验证和错误处理。我们将使用 Node.js 和 Hapi 框架来实现这个 API。
安装
在开始之前,我们需要安装 Node.js 和 Hapi 框架。我们可以通过以下命令来安装:
npm install hapi
基本用法
让我们从一个简单的 "Hello World" 应用程序开始,该应用程序使用 Hapi 框架来处理 HTTP 请求。我们将创建一个名为 server.js
的文件,并添加以下代码:
-- -------------------- ---- ------- ----- ---- - ---------------- ----- ------ - ------------- ----- ----- ----- ----------- --- -------------- ------- ------ ----- ---- -------- --------- -- -- - ------ ------ -------- - --- ----- ----- - ----- -- -- - ----- --------------- ------------------- ------- --- --------------------- -- --------
在上面的代码中,我们首先导入 Hapi 框架,然后创建一个名为 server
的 Hapi 服务器。我们指定服务器应该监听的端口和主机。接下来,我们定义一个路由,该路由将处理 HTTP GET 请求,并返回 "Hello World!" 字符串。最后,我们启动服务器并在控制台打印服务器的 URI。
我们可以使用以下命令来启动服务器:
node server.js
现在,我们可以在浏览器中访问 http://localhost:3000
,应该会看到 "Hello World!" 字符串。
RESTFul API
现在我们将尝试构建一个简单的 RESTFul API,该 API 允许我们创建、读取、更新和删除用户。我们将使用以下路由:
- GET /users - 获取所有用户
- GET /users/{id} - 获取特定用户
- POST /users - 创建用户
- PUT /users/{id} - 更新用户
- DELETE /users/{id} - 删除用户
获取所有用户
让我们从获取所有用户开始。我们将创建一个名为 users.js
的文件,并添加以下代码:
-- -------------------- ---- ------- --- ----- - - - --- -- ----- ------- -- - --- -- ----- ----- -- - --- -- ----- --------- - -- -------------- - - ------------ --------- -- -- - ------ ------ - --
在上面的代码中,我们定义了一个名为 users
的数组,其中包含三个用户。我们导出一个名为 getAllUsers
的函数,该函数将处理 HTTP GET 请求,并返回 users
数组。
接下来,我们将在 server.js
文件中添加以下代码:
const users = require('./users'); server.route({ method: 'GET', path: '/users', handler: users.getAllUsers });
在上面的代码中,我们首先导入名为 users
的模块,该模块包含 getAllUsers
函数。接下来,我们定义一个路由,该路由将处理 HTTP GET 请求,并使用 users.getAllUsers
函数作为处理程序。
现在,我们可以在浏览器中访问 http://localhost:3000/users
,应该会看到以下 JSON 响应:
[ { "id": 1, "name": "Alice" }, { "id": 2, "name": "Bob" }, { "id": 3, "name": "Charlie" } ]
获取特定用户
接下来,让我们尝试获取特定用户。我们将在 users.js
文件中添加以下代码:
-- -------------------- ---- ------- -------------- - - --- ------------ --------- -- -- - ----- -- - ---------------------------- ----- ---- - ------------ -- ---- --- ---- -- ------- - ------ ---------------- --- ------------------ - ------ ----- - --
在上面的代码中,我们导出一个名为 getUserById
的函数,该函数将处理 HTTP GET 请求,并返回具有指定 ID 的特定用户。我们首先从请求参数中获取 ID,然后使用 Array.find
方法查找具有指定 ID 的用户。如果找不到用户,则返回 404 错误响应。
接下来,我们将在 server.js
文件中添加以下代码:
-- -------------------- ---- ------- ----- ----- - ------------------- -------------- --- -- - ------- ------ ----- -------------- -------- ----------------- ---
在上面的代码中,我们定义一个名为 getUserById
的路由,该路由将处理 HTTP GET 请求,并使用 users.getUserById
函数作为处理程序。我们还在路由路径中指定了一个参数 {id}
,该参数将在请求参数中作为属性 params.id
出现。
现在,我们可以在浏览器中访问 http://localhost:3000/users/2
,应该会看到以下 JSON 响应:
{ "id": 2, "name": "Bob" }
创建用户
接下来,让我们尝试创建用户。我们将在 users.js
文件中添加以下代码:
-- -------------------- ---- ------- -------------- - - --- ----------- --------- -- -- - ----- ---- - - --- ------------ - -- ----- -------------------- -- ----------------- ------ --------------------------- - --
在上面的代码中,我们导出一个名为 createUser
的函数,该函数将处理 HTTP POST 请求,并创建一个新用户。我们首先从请求负载中获取用户名称,然后创建一个新用户对象,并将其添加到 users
数组中。最后,我们返回新用户对象,并使用 201 状态码表示创建成功。
接下来,我们将在 server.js
文件中添加以下代码:
-- -------------------- ---- ------- ----- ----- - ------------------- -------------- --- -- - ------- ------- ----- --------- -------- ---------------- ---
在上面的代码中,我们定义一个名为 createUser
的路由,该路由将处理 HTTP POST 请求,并使用 users.createUser
函数作为处理程序。
现在,我们可以使用以下命令来创建一个新用户:
curl -X POST -H "Content-Type: application/json" -d '{"name":"David"}' http://localhost:3000/users
应该会看到以下 JSON 响应:
{ "id": 4, "name": "David" }
更新用户
接下来,让我们尝试更新用户。我们将在 users.js
文件中添加以下代码:
-- -------------------- ---- ------- -------------- - - --- ----------- --------- -- -- - ----- -- - ---------------------------- ----- ---- - ------------ -- ---- --- ---- -- ------- - ------ ---------------- --- ------------------ - --------- - --------------------- ------ ----- - --
在上面的代码中,我们导出一个名为 updateUser
的函数,该函数将处理 HTTP PUT 请求,并更新具有指定 ID 的用户。我们首先从请求参数中获取 ID,然后使用 Array.find
方法查找具有指定 ID 的用户。如果找不到用户,则返回 404 错误响应。否则,我们从请求负载中获取新用户名,并更新用户对象。最后,我们返回更新后的用户对象。
接下来,我们将在 server.js
文件中添加以下代码:
-- -------------------- ---- ------- ----- ----- - ------------------- -------------- --- -- - ------- ------ ----- -------------- -------- ---------------- ---
在上面的代码中,我们定义一个名为 updateUser
的路由,该路由将处理 HTTP PUT 请求,并使用 users.updateUser
函数作为处理程序。我们还在路由路径中指定了一个参数 {id}
,该参数将在请求参数中作为属性 params.id
出现。
现在,我们可以使用以下命令来更新用户:
curl -X PUT -H "Content-Type: application/json" -d '{"name":"Eve"}' http://localhost:3000/users/2
应该会看到以下 JSON 响应:
{ "id": 2, "name": "Eve" }
删除用户
最后,让我们尝试删除用户。我们将在 users.js
文件中添加以下代码:
-- -------------------- ---- ------- -------------- - - --- ----------- --------- -- -- - ----- -- - ---------------------------- ----- ----- - ----------------- -- ---- --- ---- -- ------ --- --- - ------ ---------------- --- ------------------ - ------------------- --- ------ ----------------------- - --
在上面的代码中,我们导出一个名为 deleteUser
的函数,该函数将处理 HTTP DELETE 请求,并删除具有指定 ID 的用户。我们首先从请求参数中获取 ID,然后使用 Array.findIndex
方法查找具有指定 ID 的用户。如果找不到用户,则返回 404 错误响应。否则,我们从 users
数组中删除用户,并使用 204 状态码表示删除成功。
接下来,我们将在 server.js
文件中添加以下代码:
-- -------------------- ---- ------- ----- ----- - ------------------- -------------- --- -- - ------- --------- ----- -------------- -------- ---------------- ---
在上面的代码中,我们定义一个名为 deleteUser
的路由,该路由将处理 HTTP DELETE 请求,并使用 users.deleteUser
函数作为处理程序。我们还在路由路径中指定了一个参数 {id}
,该参数将在请求参数中作为属性 params.id
出现。
现在,我们可以使用以下命令来删除用户:
curl -X DELETE http://localhost:3000/users/2
应该会看到以下空响应:
HTTP/1.1 204 No Content
结论
在本文中,我们介绍了如何使用 Hapi 框架构建一个简单的 RESTFul API,包括路由、请求处理、输入验证和错误处理。我们还提供了示例代码,以帮助您开始构建自己的 API。希望这篇文章对您有所帮助,谢谢阅读!
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/675a58f8ca2d33f5483f8bf6