MVC模式
MVC是一种设计思想,MVC是Model-View-Controller的缩写。M:数据模型层(数据库,主要负责数据的操作);V:视图层(网页html页面,主要负责显示数据);C:逻辑控制层(写js逻辑代码,主要处理用户的请求)。
MVC将代码分为3层,使得程序易于复用、扩展和维护管理。
设计MVC框架
设计的代码
router.js
let fs=require("fs");
let url=require("url");
let mime=require("mime");
let querysting=require("querystring");
//用于保存注册的数据接口的网址的对象
let urls={};
//这个函数在每次用户用户做网络请求访问时就运行
let router=function(req,res){
let pathname=url.parse(req.url).pathname;
fs.readFile(router.basepath+pathname,(err,data)=>{
if(!err){
//用户做网络请求访问静态文件资源
res.setHeader("Content-Type",mime.getType(pathname))
res.end(data);
}else{
//用户做网络请求后端服务器没有找到静态文件资源就寻找注册过的数据接口的网址
if(!urls[pathname]){
//用户做网络请求,后端服务器即没有找到静态文件资源也没有注册过的数据接口的网址就返回404
res.end("404 not found")
}else{
//后端服务器找到注册过的数据接口的网址并调用写业务代码的回调函数
urls[pathname](req,res);
};
};
});
};
//默认静态托管的文件夹就是当前运行的js文件所在的文件夹下的public目录
router.basepath=__dirname+"/public";
//这个函数调用后接收传入的实参就可以修改需要静态托管的文件夹
router.static=function(path){
this.basepath=path;
};
//这个函数调用一次就注册一个数据接口网址
router.get=function(url,cb){
//属性名就是url是用户输入的网址的pathname部分,属性值就是传入的回调函数
urls[url]=cb;
};
module.exports=router;
controller.js
//写要执行的业务代码的js文件
//业务代码就是注册一个数据接口网址时所要执行的回调函数
module.exports={
ajax1(req,res){},
ajax2(req,res){}
};
使用设计的MVC框架
let http=require("http");
let router =require("./router.js");
let controller =require("./controller.js");
let app=http.createServer(router);
app.listen(8082);
//实现静态文件夹的托管,表示这些静态文件拥有了网址,客户端输入网址就可以访问这些静态文件资源
router.static(__dirname+"/src");
//注册数据接口网址,客户端输入网址就会运行这个回调函数,执行这个网页的业务
router.get("/login",controller.ajax1);
要执行的业务代码的controller.js文件可以写多个,这样就完成了不同网页执行不同的用户操作。
//写要执行的业务代码的js文件
//业务代码就是注册一个数据接口网址时所要执行的回调函数
module.exports={
ajax1(req,res){
res.end("tara 13th go");
},
ajax2(req,res){}
};