nodeJs--使用MVC思想封装路由


一、什么是路由

路由: 指不同的网址去执行不同的分支或者程序

二、封装路由

需求:前端输入网址后端返回相应的数据,首先输入网址后先去静态托管的文件夹去找;没有则去我们找数据接口,还没有则传个字符串比如“404 not found”。
**静态托管:**当用户输入网址时,我们可以在后端使用中间件在pathname的开头添加个文件夹来写入readFile的url中读取,就实现了,用户只能访问那个文件夹里面的文件。
比如:

var url=require("url")
var http=require("http")
var fs=require("fs")
http.createServer((req,res)=>{
    let pathname=url.parse(req.url).pathname
	fs.readFile(__dirname+'/public'+path,(err,data)=>{   // '/public'就是我们要托管的文件夹
	  res.end(data)
}}).listen(8080)

设计思想:根据需求,采用MVC编程思想来设计。

什么是MVC

V即View视图是指用户看到并与之交互的界面。比如由html元素组成的网页界面,或者软件的客户端界面。MVC的好处之一在于它能为应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,它只是作为一种输出数据并允许用户操作的方式。

M即model模型是指模型表示业务规则。在MVC的三个部件中,模型拥有最多的处理任务。被模型返回的数据是中立的,模型与数据格式无关,这样一个模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。

C即controller控制器是指控制器接受用户的输入并调用模型和视图去完成用户的需求,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。

简单来说:M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。

路由源码:

业务模型:

var obj={}
var fs=require("fs")
var url=require("url")
var mime=require("mime")
var controller=require("./controller.js")
var router=function(req,res){
      let pathname=url.parse(req.url).pathname
      let type=mime.getType(pathname)
      fs.readFile(router.basename+pathname,(err,data)=>{
            if(!err){
                res.setHeader("content-Type",type)
                res.end(data)
            }else{
                if(obj[pathname]){
                    obj[pathname](req,res)
                }else{
                    res.end("404 not found")
                }
            }
      })
}
router.basename=__dirname+'/src'
router.stacte=function(path){
    this.basename=path
}
router.get=function(path,callback){
    obj[path]=callback
}
module.exports=router

控制器:

module.exports={
    ajax1(req,res){
        var obj={name:'ljy',age:22}
        var str=JSON.stringify(obj)
        res.setHeader("content-Type","text/json;charts-utf8")
        res.end(str)
    }
    //在这里写业务函数向前端返回的数据
    
}

view界面

var http=require("http")
var router=require("./router.js")
var constroller=require("./controller.js")
http.createServer(router).listen(8081) //设置服务器,后面是设置监听的端口号
router.get("/ajax1",constroller.ajax1)  //增加数据接口 , 需要再去配置控制器的业务函数
router.stacte(__dirname+'/src')  //设置静态托管文件

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

H5_ljy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值