Node.js 和 Express.js MVC 架构指南

随着互联网的普及,Web 开发已经成为了计算机科学领域不可或缺的一部分。在许多 Web 应用程序开发中,使用 MVC 模式作为应用程序的架构非常常见。Node.js 和 Express.js 都是流行的 JavaScript 框架,它们支持 MVC 架构,使得开发 Web 应用程序变得更为方便和高效。

本文将介绍 Node.js 和 Express.js MVC 架构的基础知识、实现方式和示例代码,帮助读者理解 MVC 架构模式,掌握 Node.js 和 Express.js 框架的基本概念以及如何使用这些框架来构建 MVC 应用程序。

什么是 MVC?

MVC(Model-View-Controller)是一种不同于传统代码实现的设计模式。它被用于分离应用程序中的不同组件,以便更加容易地维护和改进应用程序。其核心思想是将应用程序分为以下三个主要组件:

  1. **模型 (Model)**:存储应用程序数据,处理数据的计算和访问。例如,当开发电子商务网站时,商品、订单和用户数据都是模型的一部分。
  2. **视图 (View)**:将数据呈现为针对用户友好的格式,例如 HTML、CSS、JavaScript 或图像。
  3. **控制器 (Controller)**:处理用户请求并更新模型和视图,以便响应合适的输出。控制器处理用户输入并决定哪个视图应该显示给用户。

MVC 模式通过将应用程序分解成这些组件,增强了应用程序的灵活性、可扩展性、可维护性和可测试性。

Node.js 中的 MVC 架构

Node.js 是一个运行在服务器端的 JavaScript 运行时环境,可以轻松构建高性能和可伸缩的网络应用程序。Node.js 广泛应用于构建服务端 Web 应用程序和工具,包括 RESTful API、后端网站、即时通讯应用程序和智能家居设备。

在 Node.js 中,我们可以使用 MVC 开发模式来构建 Web 应用程序。下面是一个基本的 Node.js MVC 应用程序目录结构:

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

在此应用程序目录结构中,我们有以下重要组件:

  • **模型 (Model)**:模型是一个独立于视图层和控制器层的 JavaScript 文件,通常用于处理数据操作和其他行业逻辑。在此示例中,我们使用了 user.js 来处理有关用户的信息和逻辑。
  • **视图 (View)**:视图用于呈现 UI 元素和内容,通常是 HTML 文件。在此示例中,我们使用了 EJS 模板引擎来定义视图。
  • **控制器 (Controller)**:控制器用于处理 HTTP 请求并将其传递给适当的模型和视图。在此示例中,我们使用了 HomeController 和 UserController 来处理不同类型的请求。
  • **路由 (Routes)**:路由指定哪个控制器用于处理特定的 HTTP 请求。在此示例中,我们使用了 index.js 来定义路由规则。

实现 Node.js MVC 应用程序

下面是 Node.js 中 MVC 应用程序的实现。

首先,我们需要安装必要的 Node.js 模块。可以使用以下命令在本地项目中安装 Express.js 和 EJS 模板引擎。

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

然后,在项目的根目录下,创建一个名为“app.js”的新文件,并将以下代码添加到该文件中:

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

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

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

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

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

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

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

在上面的代码中,我们首先加载了所有所需的 Node.js 模块。然后,我们定义了一个实例化的 Express.js 应用程序,并设置了 public 目录中的静态文件和 EJS 模板引擎的中间件。最后,我们定义了 index 和 user 路由,并在本地主机上的端口 3000 上启动了该应用程序。

接下来,我们需要创建模型、视图和控制器。在示例应用程序中,我们有以下模型:

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

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

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

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

在上述代码中,我们定义了一个名为“userModel”的 JavaScript 对象。该对象包含存储在应用程序中的用户数据,以及一些处理用户数据的函数。

然后我们需要创建视图。在本示例中,我们使用 EJS 模板引擎定义了两个视图:

views/index.ejs

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

views/about.ejs

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

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

最后,我们定义控制器。在本示例中,我们使用控制器来处理 HTTP 请求并呈现适当的视图。

controllers/HomeController.js

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

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

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

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

controllers/UserController.js

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

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

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

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

在 HomeController.js 中,我们使用 Express.js 路由来处理浏览器 GET 请求,并在 index 和 about 视图之间进行选择。在 UserController.js 中,我们处理了用于获取所有用户或单个用户的 GET 请求,并使用模型来承担数据操作。

运行 Node.js MVC 应用程序

要运行示例项目,请使用以下步骤:

  1. 在上面提供的命令行工具中,切换到项目目录中
  2. 使用以下命令启动 Node.js 服务器
---- ------
  1. 在 Web 浏览器中打开http://localhost:3000

Express.js 中的 MVC 架构

Express.js 是 Node.js 中最受欢迎的 Web 开发框架之一,支持 RESTful API 的实现和其他 Web 应用程序特性。使用 Express.js 可以快速构建 Web 应用程序和 RESTful API,而且它支持 MVC 开发模式。

与 Node.js 一样,快速构建 MVC 应用程序的第一步是安装 Express.js 框架和其他需要的模块。例如,以下命令将添加 Express.js 和 EJS 模板引擎。

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

与 Node.js MVC 应用程序类似,Express.js MVC 应用程序的基本目录结构也遵循模型、视图、控制器和路由的设计模式。下面是一个简单的目录结构示例。

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

该目录结构与我们之前创建的 Node.js 应用程序的目录结构类似。在该结构中,我们有以下组件:

  • **模型 (Model)**:在此示例中,我们使用 task.js 来处理任务的信息和逻辑。
  • **视图 (View)**:在此示例中,我们使用 EJS 模板引擎来定义两个视图。
  • **控制器 (Controller)**:在此示例中,我们使用 HomeController 和 TaskController 来处理不同类型的请求。
  • **路由 (Routes)**:在此示例中,我们使用 index.js 来定义路由规则。

实现 Express.js MVC 应用程序

下面是在 Express.js 中创建 MVC 应用程序的过程。

首先,我们需要创建一个新的 Express.js 应用程序并配置视图和其他常见中间件。在项目的根目录下,创建一个名为“app.js”的新文件,并将以下代码添加到该文件中:

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

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

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

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

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

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

然后,我们需要创建模型。在示例应用程序中,我们有以下模型:

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

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

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

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

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

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

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

task.js 包含存储在应用程序中的任务数据以及处理任务数据的函数,例如获取所有任务、获取单个任务、删除任务、添加任务和更新任务。

接下来我们创建视图。在本示例中,我们使用 EJS 模板引擎定义了两个视图:

views/index.ejs

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

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

views/taskList.ejs

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

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

最后,我们定义控制器。在本示例中,我们使用控制器来处理 HTTP 请求并呈现适当的视图。

controllers/HomeController.js

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

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

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

controllers/TaskController.js

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

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

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

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

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

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

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

在 TaskController.js 中,我们使用 Express.js 路由来处理各种 HTTP 请求,并使用模型来承担数据操作。

运行 Express.js MVC 应用程序

要运行示例项目,请使用以下步骤:

  1. 在命令行中切换到项目目录。
  2. 使用以下命令启动 Express.js 服务器。
---- ------
  1. 在 Web 浏览器中打开 http://localhost:3000。您将看到欢迎页面。单击“List all tasks”链接,浏览器将显示固定的任务列表。现在,您可以通过单击“添加任务”按钮并使用表单添加任务。添加后,该任务将显示在任务列表上。在其他页面上,您可以查看、更新或删除任务。

结论

通过 MVC 架构,在 Node.js 和 Express.js 中开发 Web 应用程序变得更加容易和高效。本文提供了相应的示例代码和目录结构,以帮助读者更好地理解 MVC 架构模式,掌握 Node.js 和 Express.js 框架的基本概念,以及如何使用这些框架来构建 MVC 应用程序。在实际项目中,建议根据具体业务逻辑和需求进行更深入的 MVC 开发模式实现。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6737017d317fbffedf0760f5