RESTful API 中使用 MongoDB 的方法

阅读时长 12 分钟读完

在现代 Web 开发中,RESTful API(Representational State Transfer)已经成为了最常见的 API 设计风格,它通过 URI(统一资源标识符)来表示资源,并利用 HTTP 协议中的各种方法(POST、GET、PUT、DELETE 等)来操作这些资源。而 MongoDB 则是一款非关系型数据库,它以 JSON 格式存储数据,并支持分布式部署和自动化的横向扩展。在 RESTful API 的实现中,常常会使用 MongoDB 作为后端数据库,本文将介绍如何利用 Node.js 和 Express 构建 RESTful API,并使用 MongoDB 存储资源数据。

环境准备

在开始之前,请确保你已经安装了以下软件:

  • Node.js(建议版本:v14.17.0)
  • MongoDB(建议版本:v4.4.6)

创建项目

首先,我们需要创建一个 Node.js 项目,可以通过以下命令进行初始化:

安装依赖

在项目中,我们需要使用以下两个 Node.js 模块:

  • Express:一个流行的 Web 框架,用于处理 HTTP 请求和响应。
  • Mongoose:一个对象模型工具,用于在 Node.js 和 MongoDB 之间建立映射关系。

可以使用以下命令进行安装:

编写代码

配置数据库连接

在使用 MongoDB 之前,需要先连接数据库。在项目的根目录下创建一个名为 db.js 的文件,并添加以下代码:

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

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

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

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

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

上述代码中,我们使用 Mongoose 连接到本地的 MongoDB 数据库,并设置了一些选项,例如使用新的 URL 解析器、统一的拓扑结构等等。在连接成功或者失败的时候,会输出相应的信息。最后,将连接对象导出。

定义数据模型

在 MongoDB 中,数据由一组文档(document)组成,每个文档可以包含不同的属性,并且不需要事先定义模式。然而,在构建 RESTful API 中,我们通常需要遵循一定的数据结构,以便于客户端能够正确地解析和使用返回的数据。因此,我们可以使用 Mongoose 来定义数据模型,并将其映射到 MongoDB 的集合(collection)中。

在项目的根目录下创建一个名为 models.js 的文件,并添加以下代码:

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

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

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

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

上述代码中,我们定义了一个名为 Book 的模型,该模型由 titleauthordescriptioncreatedAtupdatedAt 等属性组成,其中 titleauthor 是必须存在的。我们还为模型指定了一个名为 books 的集合,并设置了一些选项,例如不需要 _id__v 属性等等。最后,将模型导出。

处理 HTTP 请求

在 RESTful API 中,通常有四种基本的 HTTP 方法:

  • GET:获取资源。
  • POST:创建资源。
  • PUT:更新资源。
  • DELETE:删除资源。

因此,我们需要编写相应的路由和处理函数来处理这些请求。在项目的根目录下创建一个名为 routes.js 的文件,并添加以下代码:

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

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

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

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

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

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

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

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

上述代码中,我们使用 Express 定义了一个路由器,并为 /books 路径下的不同请求方法分别定义了相应的处理函数。例如,在 GET 方法中,我们使用模型的 find 方法获取所有图书信息,并返回 JSON 格式的数据。在 POST 方法中,我们从请求体中解析出标题、作者和描述等信息,并创建一个新的图书对象。在 PUT 方法中,我们根据 ID 更新已有的图书对象。在 DELETE 方法中,我们将根据 ID 删除相应的图书对象。

启动服务

最后,在项目的根目录下创建一个名为 index.js 的文件,并添加以下代码:

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

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

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

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

上述代码中,我们使用 Express 创建了一个应用程序,定义了 HTTP 请求体解析中间件和路由器,并监听端口以开始服务。

测试 API

可以使用 Postman 或者 curl 等工具来测试 API。例如,在 GET 方法中,可以请求 http://localhost:3000/api/books,输出如下所示的 JSON 格式的数据:

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

在 POST 方法中,可以向 http://localhost:3000/api/books 发送以下数据:

返回相应的 JSON 格式的数据,例如:

在 PUT 方法中,可以向 http://localhost:3000/api/books/:id 发送 PUT 请求,其中 :id 为要更新的图书 ID,并附带以下数据:

返回相应的 JSON 格式的数据,例如:

在 DELETE 方法中,可以向 http://localhost:3000/api/books/:id 发送 DELETE 请求,其中 :id 为要删除的图书 ID,返回相应的 JSON 格式的数据,例如:

总结

在本文中,我们了解了如何使用 Node.js 和 Express 构建 RESTful API,并使用 MongoDB 存储数据。通过定义数据模型和处理 HTTP 请求,我们可以创建基本的 CRUD(增删改查)操作,并使用 Postman 等工具进行测试。当然,还有很多其他的功能需要实现,例如分页、过滤和排序等等,但本文的代码已经足够演示如何使用 MongoDB 存储数据和创建基本的 API。希望这篇文章能够对你有所帮助。

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

纠错
反馈