mvc的概念
-
概念:一种简单易懂,使用广泛的程序设计风格。使用了mvc风格的程序主要由3部分组成:控制器(controller)、视图(view)、模型(model)
-
理解
- 视图:指的程序的输出:比如用户操作界面或数据的处理结果。
- 控制器:指程序的逻辑部分。主要是指业务处理
- 模型:指数据本身。
-
好处
- 程序的代码结构清晰,维护方便
- 模块化编程,代码可复用
-
目的:优化项目文件架构
-
例子:以学生管理系统中的students模块为例
const studentsSchema = new mongoose.Schema({ name: String, age: Number, sex: String, classId: { type: mongoose.SchemaTypes.ObjectId, //ref就是要关联集合的集合模型名,即mongoose.model()关联集合中写的名称 ref:"classesModel" }, teacherId: { type: mongoose.SchemaTypes.ObjectId, ref:'teachersModel' } //给Schema提供第二个参数,该属性是否需要生成_v,false是不生成 }, { versionKey: false }); mongoose.model('studentsModel', studentsSchema, 'students');
控制器:controllers/studentController.js。负责获取前端请求发来的数据以及从数据库拿到的数据并进行业务处理。
require('./../models/studentsModel'); const mongoose = require('mongoose'); async function getAllStudents(req,res,next) { //获取数据 let students = await mongoose.model('studentsModel').find({}).populate('teacherId').populate('classId'); console.log(students); res.send({ students }); } //暴露,以便routes文件进行使用 module.exports = { getAllStudents }
视图:routes/students.js:负责把控制器中处理后的数据返回给前端
var express = require('express'); var router = express.Router(); //引入处理学生的控制器中的 函数 const {getAllStudents } = require('./../constrollers/studentsController'); //获取所有的学生数据 router.get('/getAll',getAllStudents); module.exports = router;