RESTful API 中使用 MongoDB 的方法

在现代 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


猜你喜欢

  • 构建基于 Express.js 和 WebSocket 的 Web 聊天室

    Web 聊天室是一个非常常见的互联网应用程序,它可以让用户在一个在线环境中进行实时的文字聊天。在本文中,我们将介绍如何使用 Express.js 和 WebSocket 构建一个简单的 Web 聊天室...

    1 年前
  • Cypress 如何处理页面加载缓慢的问题

    在进行前端自动化测试时,页面加载速度往往是一个重要的问题。如果页面加载过慢,那么测试用例的运行速度也会变得非常缓慢,影响开发效率。本文将介绍如何使用 Cypress 处理页面加载缓慢的问题,提高测试用...

    1 年前
  • 使用 Mongoose 连接 MongoDB 的技巧和注意事项

    Mongoose 是一个用于管理 MongoDB 的工具,让你可以直接通过 JavaScript 操作 MongoDB 数据库。在前端开发中,连接 MongoDB 数据库是必不可少的一项工作,下面我们...

    1 年前
  • ES7 中的新特性:String.prototype.padStart() 和 String.prototype.padEnd()

    引言 在 ES7 中新增加了 String 原型对象的两个方法: String.prototype.padStart() 和 String.prototype.padEnd() 。

    1 年前
  • 使用 Koa 和 React 构建客户端渲染应用

    前言 随着前端技术的不断发展,客户端渲染应用越来越受到关注。而 Koa 和 React 是目前常用的两个技术。本文将详细讲解如何使用 Koa 和 React 构建客户端渲染应用,并且包含示例代码和实际...

    1 年前
  • Custom Elements 如何通过 JavaScript 实现动态 DOM 操作?

    在前端开发中,我们经常需要对 DOM 进行动态操作。而 Custom Elements 可以帮助我们实现对 DOM 的动态操作。本文将详细讲解 Custom Elements 是如何通过 JavaSc...

    1 年前
  • 灵活使用 ES12 中的可选参数及默认参数

    在 JavaScript 编程中,函数参数是一种非常重要的特性。ES12 新增了可选参数和默认参数的功能,使得函数的编写和使用更加灵活。本文将深入介绍 ES12 的可选参数和默认参数,以及如何灵活使用...

    1 年前
  • Next.js 中使用 CORS 跨域访问 API 的方法

    CORS(跨源资源共享)是一个 Web 浏览器使用的安全机制,用于限制跨域/跨源 HTTP 请求的来源。但是,在某些情况下,这种安全限制可能会成为开发人员的麻烦,因为它会防止浏览器加载和使用某些资源和...

    1 年前
  • PM2 的应用、部署与监控

    简介 PM2 是一款能够帮助我们管理 Node.js 进程的开发工具。它在生产环境中最受欢迎,因为它可以实现快速易用的进程管理,同时还支持负载均衡和自动重启,而这对于一个可靠的应用程序是至关重要的。

    1 年前
  • 解决 React 中的超时问题

    React 是一个流行的 JavaScript 库,广泛应用于前端开发。然而,在 React 应用上,可能出现由于异步操作导致的超时问题。本文将介绍如何在 React 应用中遇到超时问题时进行处理和解...

    1 年前
  • 解决 Babel 编译器插件引用错误导致项目无法启动

    前言 在使用 Babel 进行项目编译时,有时会出现插件引用错误导致项目无法启动的情况。这种错误可能会使项目的开发进度受到影响。本文将介绍如何解决这种问题,帮助读者快速解决该类错误并避免出现。

    1 年前
  • CSS Reset 的个人看法

    CSS Reset 是一种常见的前端技术,它被用来重置网页上的默认样式,以便开发者可以更好地掌控网页的布局和样式。然而,CSS Reset 也有其自身的弊端,本文将会从多个方面探讨 CSS Reset...

    1 年前
  • 如何使用 OAuth 2.0 与 Deno

    OAuth 2.0 是一种开放授权协议,用于安全地授权第三方应用程序访问另一个用户的资源,而无需共享用户的用户名和密码。在前端开发中,使用 OAuth 2.0 可以帮助我们实现用户登录、用户数据获取等...

    1 年前
  • 使用基于 Hapi.js 的 Swagger UI 自动生成前后端接口文档

    在前端开发中,编写接口文档是必不可少的一个过程。而手动编写文档的方式往往费时费力,而且难免会出现遗漏或者不准确的情况。因此,使用基于 Hapi.js 的 Swagger UI 自动生成前后端接口文档是...

    1 年前
  • 正确使用 ES6 中的模板字符串避免 XSS 攻击

    随着互联网技术的发展,XSS(跨站脚本攻击)已经成为了一个普遍存在的安全隐患。 XSS 攻击旨在通过在网页中注入恶意代码,控制用户浏览器从而获取信息或者完成一些恶意行为。

    1 年前
  • Jest 测试框架:如何进行 Mock 测试

    Jest 测试框架:如何进行 Mock 测试 在前端开发中,测试是非常重要的一个环节。而 Jest 是一个流行的 JavaScript 测试框架,它提供了一套完整的测试生命周期和丰富的 API,非常适...

    1 年前
  • 如何在 SASS 中使用 @extend 继承样式

    SASS 是一种 CSS 预处理器,它可以让我们在编写 CSS 时更加方便和灵活。其中的 @extend 是一项非常强大的功能,可以帮助我们在样式表中实现样式继承,提高代码的可重用性和代码复用率。

    1 年前
  • 使用 Chai 验证函数的返回值是否为空

    在前端开发过程中,经常需要验证函数的返回值是否为空。Chai 是一个流行的 JavaScript 测试库,可以帮助我们方便地进行函数返回值的验证。本文将介绍如何使用 Chai 验证函数的返回值是否为空...

    1 年前
  • LESS 使用 z-index 来管理层级的一些技巧

    在前端开发中,层级管理是一个常见的难题。处理层叠上下文、避免层级混乱、保持清晰的层次结构等任务变得更加简单。LESS 提供了一些特殊的函数和操作符,使得使用 z-index 变得更加容易。

    1 年前
  • ES8的Object.values()方法使用教程

    ES8 中新增了一个方法 Object.values(),该方法可以返回一个给定对象所有可枚举属性的值所组成的数组,而数组中的属性值顺序是和 Object.entries()返回的数组的属性名顺序是一...

    1 年前

相关推荐

    暂无文章