RESTful API 是现代 Web 开发中的基础。Hapi 是一个流行的 Node.js Web 框架,它提供了强大的路由、插件和错误处理等特性。MongoDB 是一个开源 NoSQL 数据库,它使用 JSON 格式存储文档。在本文章中,我们将学习如何使用 Hapi 与 MongoDB 构建一个强大的 RESTful API。
准备工作
在开始构建 RESTful API 之前,我们需要确保已经安装了 Node.js 和 MongoDB。如果您还没有安装它们,请先安装。在安装 Node.js 时,Node 包管理器(npm)也会自动安装。MongoDB 是一个独立的 NoSQL 数据库,需要自行从官网下载。
我们将使用 Hapi、Mongoose(为 MongoDB 提供的 Node.js ORM)和 Joi(Hapi 插件,用于验证请求数据)这些库。您可以通过 npm 进行安装:
--- ------- ---- -------- ---
设计数据模型
设计良好的数据模型是构建 RESTful API 的基础。在本教程中,我们将构建一个 TODO 应用程序,该程序将使用以下两个 MongoDB 集合:
- todos:包含待办事项和每个待办事项的详细信息,如标题、描述、截止日期等。
- users:包含应用程序用户的详细信息,如姓名、电子邮件地址和密码。
为了定义这些模型,我们使用 Mongoose。以下是 todos 数据模型的定义:
----- -------- - -------------------- ----- ---------- - --- ----------------- ------ - ----- ------- --------- ---- -- ------------ - ----- ------- --------- ---- -- ----------- - ----- ----- -------- -------- -- --------- - ----- ---- -- ---------- - ----- -------- -------- ----- -- -------- - ----- ------------------------------- ---- ------ -- --- ----- ---- - ---------------------- ------------ -------------- - -----
类似地,以下是 users 数据模型的定义:
----- -------- - -------------------- ----- ---------- - --- ----------------- ----- - ----- ------- --------- ---- -- ------ - ----- ------- --------- ---- -- --------- - ----- ------- --------- ---- -- --- ----- ---- - ---------------------- ------------ -------------- - -----
在这里,我们定义了两个 Mongoose 模型:Todo 和 User。Todo 模型包含 title、description、created_at、deadline、completed 和 user_id 属性。User 模型包含 name、email 和 password 属性。我们使用 ref 属性指向 User 模型,以便在需要时轻松地获取用户信息。
创建 Hapi 服务器
在我们开始编写路由之前,我们需要创建 Hapi 服务器。以下是服务器的设置代码:
----- ---- - ---------------- ----- -------- - -------------------- -------------------------------------------- - ---------------- ---- --- ----- ------ - --- ------------- ----- ------------ ----- ----- --- ----- -------- ------- - --- - ----- --------------- - ----- ----- - ----------------- ---------------- - ------------------- ------- ----- ----------------- - --------
在这里,我们首先连接到了 MongoDB 数据库,然后创建了一个新的 Hapi 服务器实例。我们指定了服务器的主机名和端口,并在 start() 函数中启动服务器。
编写路由
现在我们已经有了服务器,我们可以开始编写路由来处理 HTTP 请求。在本教程中,我们将定义以下路由:
- GET /todos:获取所有待办事项。
- GET /todos/{id}:获取指定 ID 的待办事项。
- POST /todos:创建新的待办事项。
- PUT /todos/{id}:更新指定 ID 的待办事项。
- DELETE /todos/{id}:删除指定 ID 的待办事项。
- POST /users:创建新的用户。
- POST /login:用户登录。
以下是我们的路由定义:
----- --- - --------------- ----- ---- - ------------------------- ----- ---- - ------------------------- -------------- ------- ------ ----- --------- ----- ---------------- -- - ----- ----- - ----- -------------------------------- ------ - ----- ----- -- -- --- -------------- ------- ------ ----- -------------- ----- ---------------- -- - ----- ---- - ----- ----------------------------------------------------- -- ------- - ------ ------------------- --- -------- - ------ - ----- ---- -- -- --- -------------- ------- ------- ----- --------- ----- ---------------- -- - --- - ----- ---- - --- ------ ------ ---------------------- ------------ ---------------------------- --------- ------------------------- -------- ------------------------ --- ----- ------------ ------ - ----- ---- -- - ----- ----- - ------ --------------------- - -- -------- - --------- - -------- ------------ ------ ------------------------ ------------ ------------------------ --------- ---------------------- -------- ------------------------ --- -- -- --- -------------- ------- ------ ----- -------------- ----- ---------------- -- - --- - ----- ---- - ----- ----------------------------------------- - ------ ---------------------- ------------ ---------------------------- --------- ------------------------- ---------- -------------------------- --- -- ------- - ------ ------------------- --- -------- - ------ - ----- ---- -- - ----- ----- - ------ --------------------- - -- -------- - --------- - -------- ------------ ------ ------------------------ ------------ ------------------------ --------- ---------------------- ---------- ------------------------- --- -- -- --- -------------- ------- --------- ----- -------------- ----- ---------------- -- - ----- ---- - ----- ------------------------------------------ -- ------- - ------ ------------------- --- -------- - ------ - -------- ----- -------- -- -- --- -------------- ------- ------- ----- --------- ----- ---------------- -- - --- - ----- ---- - --- ------ ----- --------------------- ------ ---------------------- --------- ------------------------- --- ----- ------------ ------ - ----- ---- -- - ----- ----- - ------ --------------------- - -- -------- - --------- - -------- ------------ ----- ------------------------ ------ -------------------------------- --------- ------------------------ --- -- -- --- -------------- ------- ------- ----- --------- ----- ---------------- -- - ----- - ------ -------- - - ---------------- ----- ---- - ----- -------------- ----- --- -- ------ -- ------------- --- --------- - ------ -------------------------- -------------- - ------ - ----- ---- -- -- -------- - --------- - -------- ------------ ------ -------------------------------- --------- ------------------------ --- -- -- ---
在这里,我们定义了各种路由,无论是获取、创建、更新还是删除 TODO,或是创建用户或进行登录。我们还使用了 Joi 插件来验证用户数据,使用 Mongoose 在 MongoDB 中查询并操作数据。我们还使用了 Boom 插件来返回适当的 HTTP 错误响应。
结论
现在您已经了解了如何使用 Hapi 和 MongoDB 构建一个强大的 RESTful API。我们在本教程中学习了许多关于 Hapi、Mongoose、Joi 和 MongoDB 的知识,并知道了如何构建路由来处理 HTTP 请求。我希望这篇文章对您有所帮助,并能让您在构建 Web 应用程序时大显身手!
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/67089e19d91dce0dc8730029