使用 Express.js 构建 RESTful 风格 App

RESTful 是一种设计 Web 应用程序的架构风格,它通常基于 HTTP 协议,并使用 HTTP 动词(GET、POST、PUT、DELETE)对资源进行管理。它的特点是快速、可扩展、适应性强且易于维护。Express.js 是一个强大的 Node.js 框架,可以轻松构建出 RESTful 风格的应用程序。在本文中,我们将学习如何使用 Express.js 构建一个完整的 RESTful 风格应用程序。

环境和准备工作

在开始前,请确保你已经安装好了以下环境:

  • Node.js
  • npm
  • MongoDB

同时,我们需要安装的一些依赖包:

  • Express.js
  • body-parser
  • mongoose

可以使用以下命令安装:

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

在安装完成后,我们需要创建项目目录。在该目录下创建一个 server.js 文件,作为我们应用程序的入口文件。

创建 RESTful API

RESTful 风格应用程序的核心是 API 接口。在 Express.js 中,我们可以通过创建路由来定义 API 接口。我们先创建一个 routes 目录,并在里面创建一个 api.js 文件。

api.js 中,我们先定义路由的基础路径:

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

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

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

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

该路由定义了一个基础路径 /,并处理 GET 请求,返回 API Home。此外,我们打印了一个日志,表示该 API 被调用。

server.js 中,我们加载并使用此路由:

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

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

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

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

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

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

现在,我们可以访问 http://localhost:3000/api,并得到一个 API Home 的响应。

连接 MongoDB 数据库

在大多数情况下,RESTful 风格应用程序需要与数据库进行交互。在本文中,我们将使用 MongoDB 作为我们的数据库。首先,安装 mongoose 包。

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

server.js 中,我们定义了 MongoDB 数据库的连接:

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

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

在这里,我们通过 mongoose.connect 连接到名为 restfulapp 的 MongoDB 数据库,并在出错时打印了一个错误日志。

创建资源

在 RESTful 风格应用程序中,我们使用 HTTP 动词来操作资源。这些动词包括 GET、POST、PUT、DELETE 等。 我们将使用 mongoose 来定义和操作数据库的资源。我们先在 models 目录中创建一个 user.js 文件,该文件定义了一个用户模型,如下所示:

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

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

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

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

这里定义了一个名为 User 的模型,该模型包含了用户的 firstNamelastNameemaildateCreated 等属性。为了保证 email 的唯一性,我们设置了该属性的 unique 属性为 true

定义 API 接口

现在,我们已经有了一个包含资源的数据模型。我们可以使用这些资源来定义 API 接口。在 api.js 中,我们定义了以下路由:

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

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

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

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

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

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

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

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

该路由定义了两个 RESTful 风格的路由: /users/users/:user_id,分别对应于所有用户和单个用户的操作。其中,get() 方法获取所有用户,post() 方法创建一个新用户,get(user_id) 方法获取单个用户,put(user_id) 方法更新单个用户,delete(user_id) 方法删除单个用户。

现在,我们可以使用 POSTMAN 或 CURL 等工具来测试这些 API 接口。

总结

在本文中,我们学习了如何使用 Express.js 框架来构建 RESTful 风格的应用程序,并使用了 MongoDB 来保存和操作资源数据。我们定义了一些 RESTful API 接口,对用户资源执行 CRUD 操作。我们还学习了使用 mongoose 来定义和操作数据库的数据模型。如果您想学习更多有关 Express.js 的内容,可以查看我们的其他学习资源。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/654f15207d4982a6eb81a95a


猜你喜欢

  • 解决 ES12 中 Intl.DateTimeFormat.format() 方法的时区问题

    在前端开发中,我们经常需要对日期进行处理和格式化,这时候就需要用到 Intl.DateTimeFormat 对象。而在 ES12 中,新增了 format() 方法来对日期进行格式化。

    1 年前
  • 使用 PM2 监控和管理 Node.js 进程

    介绍 在前端开发中,我们经常需要使用 Node.js 进行后端服务的开发。但是随着项目的复杂性增加,我们需要管理多个 Node.js 进程,同时保证进程稳定运行。这时,我们需要使用一个进程管理工具来管...

    1 年前
  • 如何在 Mocha 测试中使用 ES6 / ES7 功能?

    Mocha 是一个流行的 JavaScript 测试框架,它支持运行不同类型的测试用例,无论是后端还是前端。在前端开发中,使用 ES6 / ES7 的语言特性已经成为主流,同时也可以使用这些功能来编写...

    1 年前
  • 在 Deno 中使用 MongoDB 数据库教程

    Deno 是一个现代化的 JavaScript 和 TypeScript 运行时环境,具备安全性、稳定性和性能优势。使用 Deno,我们可以方便地在后端开发中使用 JavaScript 或 TypeS...

    1 年前
  • ES6/ES2015 中的迭代器和生成器

    在 ES6/ES2015 中,引入了一些新的特性,其中迭代器和生成器是非常强大和有用的特性。它们为我们提供了更加灵活和可控的方式来处理序列化数据、异步编程等问题。本文将深入讲解迭代器和生成器的概念、使...

    1 年前
  • CSS Flexbox 实现会议日程表的布局技巧

    前言 在进行前端页面设计时,布局是一个关键的环节。而使用 CSS Flexbox 可以有效地实现页面布局,特别是在处理复杂的布局结构时,优势更加明显。本文将介绍如何使用 CSS Flexbox 实现一...

    1 年前
  • Cypress 自动化测试实战之上传文件

    在前端开发过程中,我们经常需要上传文件。上传文件是一个比较常见的需求,也是一个比较难以测试的场景。今天,我们将介绍使用 Cypress 自动化测试工具来测试上传文件的过程。

    1 年前
  • 通过 Helm 部署 Kubernetes 集群

    Kubernetes 是一款开源的容器编排引擎,能够自动化地管理容器的部署、扩展和运维,极大地简化了应用程序的开发和运维工作。为了更好地管理 Kubernetes 集群,大家常常采用 Helm 工具对...

    1 年前
  • ES11 新特性可选链操作符详解

    在 Web 开发中,我们常常需要访问对象的属性或方法。然而,由于 JavaScript 的动态特性,对象属性和方法的存在是不确定的。在访问不存在的属性或方法时,会抛出一个错误,这可能会导致程序出现问题...

    1 年前
  • Fastify 中如何使用 Sequelize 操作数据库

    在前端开发中,操作数据库是不可避免的。在 Node.js 中,可以使用 Sequelize 这个 ORM(Object-relational mapping)框架来方便地操作数据库。

    1 年前
  • Chai 的 BDD 和 TDD 两种测试风格对比

    Chai 是一个用于 JavaScript 应用程序的断言库。它是一个流行的测试工具,用于编写可靠的单元测试。Chai 支持两种测试风格,即行为驱动开发(BDD)和测试驱动开发(TDD)。

    1 年前
  • Socket.io 连接断开时的重连机制及实现方法

    在现代的 Web 应用中,实时通讯是不可或缺的一部分。Socket.io 是一种流行的实时通讯库,它基于 WebSocket 和其他网络协议,能够简化实时通讯的开发,并具备自动重连的机制。

    1 年前
  • Custom Elements 中实现自定义图表组件的方法

    在前端开发中,图表是非常重要的一部分。但是现有的图表库并不能完全满足开发者的需求,特别是在定制化上面。因此,自定义图表组件变得越来越重要。本文将介绍在 Custom Elements 中实现自定义图表...

    1 年前
  • 在 ES7 中使用 includes() 方法实现数组元素查找

    在 ES7 中使用 includes() 方法实现数组元素查找 在前端开发中,我们经常需要对数组进行操作,其中包括查找。在 ES7 中,新增了 includes() 方法,可以用来实现数组元素的查找。

    1 年前
  • 基于 Headless CMS 的定制化工作流设计与实现

    前言 Headless CMS 是一个新型的内容管理系统,它通过将前端和后端分离,使内容管理变得更加灵活。实际上,它只关注数据管理,而在前端界面方面则完全由使用它的开发者自主定制开发。

    1 年前
  • 在 ES10 中解决 JavaScript 被污染的 Object 原型问题

    在 ES10 中解决 JavaScript 被污染的 Object 原型问题 JavaScript 中的 Object 原型是一个非常重要的概念,其决定了 JavaScript 中所有对象的基本属性和...

    1 年前
  • LESS 实例教程:如何有效维护 CSS 样式

    在前端开发中,CSS 样式表的管理是一个重要的问题。对于大型的项目,样式表的规模往往非常庞大,维护成本也相应增加。LESS 是一种 CSS 预处理器,可以帮助我们更加高效地维护 CSS 样式表,本文将...

    1 年前
  • 为什么 Serverless 架构能使你的工程师更快乐

    Serverless 架构是一种新兴的云计算架构,它彻底颠覆了传统的服务器架构。Serverless 架构通过将底层硬件和操作系统抽象化,实现了无服务器的部署和运行。

    1 年前
  • 学习 GraphQL 的好处和资源

    #学习 GraphQL 的好处和资源 ##GraphQL是什么 GraphQL是一种API查询语言,它已经成为了现代Web应用程序中的流行技术。GraphQL 是一个强类型的查询语言,使客户端能够精确...

    1 年前
  • Docker 部署 Web 程序网站跨域 Access-Control-Allow-Origin 问题解决方法

    Web 程序的跨域问题是前端开发中经常会遇到的问题,特别是在开发大型应用时,多个微服务之间的通信更加需要注意跨域问题。本文将重点探讨如何通过 Docker 部署 Web 程序来解决跨域问题,希望可以为...

    1 年前

相关推荐

    暂无文章