【Node.js后端架构:MVC模式】基于expres讲解

2023-12-02 05:30

本文主要是介绍【Node.js后端架构:MVC模式】基于expres讲解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Node.js后端架构:MVC模式

什么是MVC

MVC (Model-View-Controller) 是一种软件设计模式,用于将应用程序的逻辑分离成三个不同的组件:模型、视图和控制器。

  • 模型(Model)负责处理应用程序的数据逻辑。它负责从数据库或其他数据源中获取数据,并对数据进行处理和操作。

  • 视图(View)负责展示数据给用户。它负责将模型中的数据以用户友好的方式呈现出来,通常是通过HTML模板或其他前端技术来实现。

  • 控制器(Controller)负责处理用户的请求和操作。它接收用户的输入,并根据输入调用适当的模型和视图来完成相应的操作。

MVC的优点在于它能够将应用程序的不同部分分离开来,使得代码更易于维护和扩展。通过将数据逻辑、展示逻辑和用户交互逻辑分离开来,开发人员可以更好地组织和管理代码。

在这里插入图片描述

Node.js中的MVC

在Node.js的后端开发中,使用MVC模式可以帮助我们更好地组织和管理代码。我们可以将数据逻辑放在模型中,将展示逻辑放在视图中,将用户交互逻辑放在控制器中。这样,我们可以更好地分离关注点,使得代码更易于理解和维护。

  • 1,Client 端发送请求到 Server 端。
  • 2,server 端的Controller接收请求并进行解析。
  • 3,Controller找到与请求对应的Model,并将请求交给该 Model 处理。
  • 4,Model 处理完后,将数据返回给Controller,并由Controller交给 View处理。
  • 5,View生成可供客户端查看的HTML文件,并将结果返回给服务器端。
  • 6,Server 端发送响应到 Client 端。

注意:如果只是开发API,第5步骤将会变成将数据返回给控制器,并由控制器将数据转换为API响应格式,然后将响应发送回客户端。视图的生成步骤可以省略,因为API不需要生成HTML文件。

快速创建Express中的 MVC

在Express中,使用快速建立开发环境的方式生成Express项目时,MVC的工作方式如下:

在这里插入图片描述

  • 1,Client端发送请求至 Server端。
  • 2,Server端将收到的请求由特定的Router(相当于 Controller )来做处理。
  • 3,若收到的请求需要DB来交互数据,则从DB中交互数据,并回传至Router中。若不需要数据库则直接返回。
  • 4,待Router处理完业务的逻辑后,将其结果传给View,并由View来产生html文件。
  • 5,通过Router来将View所产生的html文件送至Server端中。
  • 6,Server端回复响应至Client端。

注意:如果只是开发API,第5步骤将会变成: 数据通过 Router直接给 Server端,视图的生成步骤可以省略,因为API不需要生成HTML文件。

读者可以发现,借由Express的快速建置开发环境的项目中,Router本身就会涵盖了controller及model的部分。

快速建立开发环境的方式的目录结构是:

.
├── app.js
├── bin
│   └── www
├── package.json
├── public
│   ├── images
│   ├── javascripts
│   └── stylesheets
│       └── style.css
├── routes
│   ├── index.js
│   └── users.js
└── views├── error.ejs└── index.ejs

也就是说我们将controller及model的部分都集中写在 routes 文件夹下。假设以 routes 文件夹中的index.js来说,其代码会是:

var express = require('express');
var router = express.Router();/* GET home page. */
router.get('/', function(req, res, next) {// do something// 連接資料庫// 從資料庫將資料撈完後進行res.render的動作。
});module.exports = router;

注释:res.render 指Express中,让处理完的数据传送到view的指令。

自定义 Express 中的MVC

若使用Express的快速建置开发环境的项目,是还没有做到职责分离的动作,我们可以试着将controller及model加入其中,其运作会是:

在这里插入图片描述

  • 1,Client端 发送request至 Server端
  • 2,Server端接收到request后,交由特定的 Router 的function所接收,并调用相对应的 Controller
  • 3,通过相对应的 Controller 的 function 来调用特定的model进行处理。
  • 4,若该request需要与DB来进行数据交互,则从DB中数据交互,并将数据回传至Model中。若无则直接在Controller处理业务逻辑。
  • 5,待Model处理完数据的逻辑后,将其结果回传至 Controller 中进行业务逻辑的处理 。
  • 6,ControllerModel的数据传给View,并由View来生成html文件。
  • 7,通过 Controller 来将view所生成的html文件送至server端中。
  • 8,Server端回复response至 Client端

注意:
如果只需要开发API,可以跳过第6步骤,并且第7步骤会变成:
通过ControllerModel处理完的结果交由server端。

那现在的目录结构如下:

.
├── app.js
├── bin
│   └── www
├── controllers
│   ├── index_controller.js
├── models
│   ├── index_model.js
├── package.json
├── public
│   ├── images
│   ├── javascripts
│   └── stylesheets
│       └── style.css
├── routes
│   ├── index.js
│   └── users.js
└── views├── error.ejs└── index.ejs

通过添加controllers和models文件夹,并让其中的JavaScript文件分别负责处理controller和model的部分,实现了职责分离。在controllers文件夹中的文件负责处理请求的业务逻辑,而在models文件夹中的文件负责与数据库进行交互和处理数据。这样可以使代码更加模块化和可维护,提高开发效率和代码的可读性。

可以编写以下代码来处理请求的路由逻辑:

  • 在routers文件夹中的index.js文件中,
const IndexController = require('../controllers/index_controller');indexController = new IndexController();router.get('/', indexController.sayHiController);
  • controllers文件夹的 index_controller.js
const IndexModel = require('../models/index_model');indexModel = new IndexModel();module.exports = class IndexController {sayHiController(req, res ,next) {// do something// 调用model中的函数,从数据库中获取数据// 使用res.json将数据作为响应发送给客户端 。}
}
  • models 文件夹的 index_model.js
module.exports = class IndexModel {sayHiModel(req, res ,next) {// 从数据库中查询数据//插入新的数据到数据库//更新数据库中的数据//删除数据库中的数据//对数据进行验证和格式化//执行复杂的数据操作,如聚合、联表查询等//处理与数据相关的业务逻辑}
}

小结

MVC确实是一种理念和设计模式,而不是一种具体的技术。它的目的是将应用程序的不同部分分离开来,使代码更加模块化、可维护和可扩展。

在实际开发中,如何分离整个程序的职责是根据具体情况而定的。每个项目都有不同的需求和约束,因此选择适合项目的架构和设计模式非常重要。与后端开发团队进行沟通和协商,共同决定如何进行开发是至关重要的。

除了MVC,还有其他的架构和设计模式可以用于开发,如MVVM、MVP、Clean Architecture等。选择合适的架构和设计模式取决于项目的规模、复杂性和团队的技术栈和经验。

总之,开发团队应该根据项目需求和团队的实际情况,选择适合的架构和设计模式,并进行良好的沟通和协作,以确保项目的成功和代码的质量。

这篇关于【Node.js后端架构:MVC模式】基于expres讲解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/444123

相关文章

Redis的Zset类型及相关命令详细讲解

《Redis的Zset类型及相关命令详细讲解》:本文主要介绍Redis的Zset类型及相关命令的相关资料,有序集合Zset是一种Redis数据结构,它类似于集合Set,但每个元素都有一个关联的分数... 目录Zset简介ZADDZCARDZCOUNTZRANGEZREVRANGEZRANGEBYSCOREZ

Go中sync.Once源码的深度讲解

《Go中sync.Once源码的深度讲解》sync.Once是Go语言标准库中的一个同步原语,用于确保某个操作只执行一次,本文将从源码出发为大家详细介绍一下sync.Once的具体使用,x希望对大家有... 目录概念简单示例源码解读总结概念sync.Once是Go语言标准库中的一个同步原语,用于确保某个操

Spring MVC如何设置响应

《SpringMVC如何设置响应》本文介绍了如何在Spring框架中设置响应,并通过不同的注解返回静态页面、HTML片段和JSON数据,此外,还讲解了如何设置响应的状态码和Header... 目录1. 返回静态页面1.1 Spring 默认扫描路径1.2 @RestController2. 返回 html2

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

使用Vue.js报错:ReferenceError: “Vue is not defined“ 的原因与解决方案

《使用Vue.js报错:ReferenceError:“Vueisnotdefined“的原因与解决方案》在前端开发中,ReferenceError:Vueisnotdefined是一个常见... 目录一、错误描述二、错误成因分析三、解决方案1. 检查 vue.js 的引入方式2. 验证 npm 安装3.

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

mybatis的整体架构

mybatis的整体架构分为三层: 1.基础支持层 该层包括:数据源模块、事务管理模块、缓存模块、Binding模块、反射模块、类型转换模块、日志模块、资源加载模块、解析器模块 2.核心处理层 该层包括:配置解析、参数映射、SQL解析、SQL执行、结果集映射、插件 3.接口层 该层包括:SqlSession 基础支持层 该层保护mybatis的基础模块,它们为核心处理层提供了良好的支撑。

百度/小米/滴滴/京东,中台架构比较

小米中台建设实践 01 小米的三大中台建设:业务+数据+技术 业务中台--从业务说起 在中台建设中,需要规范化的服务接口、一致整合化的数据、容器化的技术组件以及弹性的基础设施。并结合业务情况,判定是否真的需要中台。 小米参考了业界优秀的案例包括移动中台、数据中台、业务中台、技术中台等,再结合其业务发展历程及业务现状,整理了中台架构的核心方法论,一是企业如何共享服务,二是如何为业务提供便利。

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能