nodejs服务端MVC架构介绍
MVC架构本质:确定每一个js文件的职责
以nodejs数据管理系统为例,本文章代码仅为服务端演示代码,单独复制粘贴可能无效果。因为MVC并不是一门技术,而是一种项目架构思想
- index.js:负责接收请求
- router.js:负责将请求分发给C层
- controller.js:C层负责处理业务逻辑(V与M之间的沟通)
- views:V层:负责展示页面
- model: M层:负责处理数据(增删改查)
/* 路由模块:只负责分发网络请求给C层,不处理 */
//导入C层
const controller = require('./controller.js');
//1.导入express模块
const express = require('express');
//2.创建路由
var app = express();
//路由分发
//Express支持链式语法
app.get('/',controller.showHeroList)
.get('/heroList',controller.getHeroList)
.post('/heroAdd',controller.doHeroAdd)
.get('/heroInfo',controller.getHeroInfo)
.get('/heroDelete',controller.doHeroDelete);
//3.导出路由模块
module.exports = app;
/* C层:负责业务逻辑处理:M与C层之间的沟通 */
//M层:操作数据库增删改查
const hero = require('./model/hero.js');
module.exports = {
showHeroList: (req, res) => {
//服务端重定向到view/heroList.html
res.writeHead(302, {
'Location': 'views/heroList.html'
});
res.end();
},
getHeroList: (req, res) => {
//1.展示首页列表数据
hero.find((err, jsonData) => {
console.log(jsonData);
if (err) {
throw err;
} else {
res.end(jsonData);
};
});
},
doHeroAdd: (req, res) => {
//完成解析之后,将得到的数据存入json文件
hero.add(req.body, (err) => {
if (err) {
//服务端不能直接返回js对象,因为服务器是给所有客户端使用,需要返回json对象
res.end(JSON.stringify({
err_code: 100,
err_msg: err.err_msg
}));
} else {
res.end(JSON.stringify({
err_code: 0,
err_msg: 'success'
}));
}
});
},
getHeroInfo: (req, res) => {
var heroID = req.query.id;
//处理
hero.find(heroID, (err, data) => {
if (err) {
throw err;
} else {
res.end(data);
};
});
},
doHeroDelete: (req, res) => {
//(1)获取请求参数
let heroID = req.query.id;
//(2)处理请求
hero.delete(heroID, (err) => {
if (err) {
throw (err);
} else {
//服务端重定向刷新首页
res.writeHead(302, {
'Location': 'views/heroList.html'
});
res.end();
}
});
}
}