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

news2024/11/19 13:19:22

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等。选择合适的架构和设计模式取决于项目的规模、复杂性和团队的技术栈和经验。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1294541.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用Netty实现文件传输的HTTP服务器和客户端

现在我们来用netty实现文件传输的HTTP服务器和客户端 pom依赖文件&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-insta…

国内好用的CRM系统你知道哪些?看看这篇吧

选择CRM系统需要考虑许多因素&#xff0c;其中一个重要的标准是用户数量。使用广泛、受到用户认可的CRM系统&#xff0c;无论是在功能、易用性、灵活性还是价格上&#xff0c;都会给企业带来更多的益处。有什么国内用得比较多的CRM系统吗&#xff1f; 以Zoho CRM为例&#xff…

Linux学习教程(第十四章 Linux系统服务管理)一

第十四章 Linux系统服务管理&#xff08;一&#xff09; 什么是系统服务&#xff1f;服务是在后台运行的应用程序&#xff0c;并且可以提供一些本地系统或网络的功能。 那么&#xff0c;Linux 中常见的服务有那些&#xff0c;这些服务怎么分类&#xff0c;服务如何启动&#x…

视频处理关键知识

1 引言 视频技术发展到现在已经有100多年的历史&#xff0c;虽然比照相技术历史时间短&#xff0c;但在过去很长一段时间之内都是最重要的媒体。由于互联网在新世纪的崛起&#xff0c;使得传统的媒体技术有了更好的发展平台&#xff0c;应运而生了新的多媒体技术。而多媒体技术…

为什么感染HPV的人越来越多?劲松中西医结合医院专家发表看法

近年来&#xff0c;HPV感染率在我国呈现上升趋势&#xff0c;引起了社会的广泛关注。HPV是一种人乳头瘤病毒&#xff0c;主要通过性接触传播&#xff0c;也是引起宫颈癌的主要原因之一。那么&#xff0c;为什么我国的HPV感染率如此高呢&#xff1f; 首先&#xff0c;我们需要了…

手把手教你写 Compose 动画 -- 讲的不能再细的 AnimationSpec 动画规范

前面我们聊过 animateDpAsState 和 Animatable 两种动画 API 的用法&#xff0c;但只是简单了解了&#xff0c;这两个函数内部都有一个共同的核心参数&#xff1a;AnimationSpec。 Composable fun animateDpAsState(targetValue: Dp,animationSpec: AnimationSpec<Dp> …

友思特 Neuro-R:快速部署实时推理API

科技赋能&#xff0c;视觉技术在缺陷检测方面的应用为生产制造自动化程度带来了重大影响&#xff0c;有效缩短了检测时间&#xff0c;提升了生产效率&#xff0c;创造出更多的经济效益。通过视觉技术的精准分析和快速判断&#xff0c;缺陷检测变得更加准确、高效&#xff0c;无…

Java二十一章 网络通信

1 网络程序设计基础 网络程序设计编写的是与其他计算机进行通信的程序。 局域网与互联网 服务器是指提供信息的计算机或程序&#xff0c;客户机是指请求信息的计算机或程序。网络用于连接服务器与客户机&#xff0c;实现两者间的相互通信。 网络协议 网络协议规定了计算机…

echarts绘制一个柱状折线图

其他echarts&#xff1a; echarts绘制一个环形图 echarts绘制一个饼图 echarts绘制一个环形图2 效果&#xff1a; 代码&#xff1a; <template><div class"wrapper"><!-- 柱状图 --><div v-if"type new_bar" ref"barChar…

2023最新八股文前端面试题

第一章 Css 1.说一下CSS的盒模型。 在HTML页面中的所有元素都可以看成是一个盒子盒子的组成:内容content、内边距padding、边框border、外边距margin盒模型的类型: 标准盒模型 margin border padding content IE盒模型 margin content(border padding) 控制盒模型的模式…

如何选择靠谱的软件测试外包公司?CMA、CNAS软件测试报告获取

作为信息科技产业的代表之一&#xff0c;软件公司受到了越来越多的关注&#xff0c;它们的发展为我国的科技创新提供了强大的战略支撑。软件测试作为提升软件产品质量的后盾&#xff0c;日益成为一个专业化、标准化和规范化的行业&#xff0c;软件测试外包公司就是这种背景下成…

每日汇评:由于非农就业数据可能低迷,黄金恐再次测试2050美元上方

周五早间&#xff0c;金价在2,030美元附近扩大区间&#xff1b; 美元正在企稳&#xff0c;美债收益率坚持复苏收益&#xff1b; 由于美国就业大概率疲软&#xff0c;黄金日线图倾向于看涨&#xff1b; 周五早间&#xff0c;金价连续第四个交易日延续区间波动走势&#xff0c;因…

员工持股平台模式有哪几种?

员工持股平台模式 目前在现有的市场环境下持股平台的模式主要有公司型的持股平台以及有限合伙企业的持股平台。 &#xff08;一&#xff09;公司型员工持股平台 设立公司型的员工持股平台的唯一目的是为了让平台公司受让母公司的股权&#xff0c;从而实现员工间接持有母公司股权…

外贸行业的CRM系统和其它CRM有什么区别?

外贸行业对客户管理的追求日益提高&#xff0c;为了应对客户需求的变化和多元性&#xff0c;外贸企业需要借助CRM管理系统实现智能管理。下面&#xff0c;我们将详细探讨外贸CRM的概念、特点和具体应用。 什么是外贸CRM&#xff1f; 外贸CRM是指针对外贸行业的客户关系管理系…

3-Mybatis

文章目录 Mybatis概述什么是Mybatis&#xff1f;Mybatis导入知识补充数据持久化持久层 第一个Mybatis程序&#xff1a;数据的增删改查查创建环境编写代码1、目录结构2、核心配置文件&#xff1a;resources/mybatis-config.xml3、mybatis工具类&#xff1a;Utils/MybatisUtils4、…

电商行业邮件营销全攻略:解决方案与实施技巧

在电商行业这样多元化且快节奏的行业中&#xff0c;有效、及时的沟通则是其业务发展的基础之一。您需要在客户生命周期的各个阶段与他们进行交互&#xff0c;需要在恰当的时机推送他们需要的信息&#xff0c;更重要的是&#xff0c;您需要根据客户的购买经历迅速制定营销方案&a…

STL(五)(queue篇)

我发现之前一版在电脑上看 常用函数部分 没有问题,由于是手打上去的,在手机上看会发生错位问题,现已将电脑原版 常用函数部分 截图改为图片形式,不会再发生错位问题,非常感谢大家的支持 ### priority_queue优先队列出现频率非常高,尤为重要(是一定要掌握的数据结构) 1.queue队…

vmware虚拟机17 安装macos14过程及问题处理亲测

前期准备 1、可引导可虚拟机安装的macOS Sonoma 14 ISO镜像安装文件 我找到得地址&#xff0c;下载自行解决啦 2、VMware虚拟机应用软件 官网下载就好&#xff0c;搜个码搞定 3、解锁工具macOS Unlocker 开始安装&#xff1a; 1、打开VMware软件&#xff0c;新建一个系统…

[MySQL] MySQL复合查询(多表查询、子查询)

前面我们学习了MySQL简单的单表查询。但是我们发现&#xff0c;在很多情况下单表查询并不能很好的满足我们的查询需求。本篇文章会重点讲解MySQL中的多表查询、子查询和一些复杂查询。希望本篇文章会对你有所帮助。 文章目录 一、基本查询回顾 二、多表查询 2、1 笛卡尔积 2、2…

【Vulnhub 靶场】【Funbox: GaoKao】【简单】【20210606】

1、环境介绍 靶场介绍&#xff1a;https://www.vulnhub.com/entry/funbox-gaokao,707/ 靶场下载&#xff1a;https://download.vulnhub.com/funbox/FunboxGaoKao.ova 靶场难度&#xff1a;简单 发布日期&#xff1a;2021年06月06日 文件大小&#xff1a;1.3 GB 靶场作者&#…