当前位置:网站首页>nodeJs--封装路由
nodeJs--封装路由
2022-08-05 02:06:00 【H5_ljy】
一、什么是路由
路由: 指不同的网址去执行不同的分支或者程序
二、封装路由
需求:前端输入网址后端返回相应的数据,首先输入网址后先去静态托管的文件夹去找;没有则去我们找数据接口,还没有则传个字符串比如“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') //设置静态托管文件
边栏推荐
- AI+小核酸药物|Eleven完成2200万美元种子轮融资
- Transfer Learning - Joint Geometrical and Statistical Alignment for Visual Domain Adaptation
- Short domain name bypass and xss related knowledge
- 如何模拟后台API调用场景,很细!
- .Net C# Console Create a window using Win32 API
- Advanced Numbers_Review_Chapter 1: Functions, Limits, Continuity
- [Endnote] Word inserts a custom form of Endnote document format
- 如何发现一个有价值的 GameFi?
- Greenplum Database Fault Analysis - Why Does gpstart -a Return Failure After Version Upgrade?
- 第09章 性能分析工具的使用【2.索引及调优篇】【MySQL高级】
猜你喜欢
Leetcode brushing questions - 22. Bracket generation
释放技术创新引擎,英特尔携手生态合作伙伴推动智慧零售蓬勃发展
直播回放含 PPT 下载|基于 Flink & DeepRec 构建 Online Deep Learning
Utilities Exercise: Selecting a Structure (1)
开篇-开启全新的.NET现代应用开发体验
使用OpenVINO实现飞桨版PGNet推理程序
[How to smash wool according to the music the couple listens to during the Qixi Festival] Does the background music affect the couple's choice of wine?
【MySQL系列】- LIKE查询 以%开头一定会让索引失效吗
【Unity入门计划】2D游戏中遮挡问题的处理方法&伪透视
随机推荐
程序员失眠时的数羊列表 | 每日趣闻
JZ搜索引擎solr研究-从数据库创建索引
【MySQL series】- Does LIKE query start with % will make the index invalid?
iNFTnews | What can NFTs bring to the sports industry and fans?
【Word】Word公式导出PDF后出现井号括号#()错误
迁移学习——Joint Geometrical and Statistical Alignment for Visual Domain Adaptation
亚马逊云科技 + 英特尔 + 中科创达为行业客户构建 AIoT 平台
Simple implementation of YOLOv7 pre-training model deployment based on OpenVINO toolkit
DDOS攻击真的是无解吗?不!
PHP Skills Assessment
[Machine Learning] 21-day Challenge Study Notes (2)
Is DDOS attack really unsolvable?Do not!
为什么他们选择和AI恋爱?
使用SuperMap iDesktopX数据迁移工具迁移地图文档和符号
缺陷检测(图像处理部分)
如何逐步执行数据风险评估
力扣-二叉树的前序遍历、中序遍历、后序遍历
ExcelPatternTool: Excel表格-数据库互导工具
1349. Maximum number of students taking the exam Status Compression
Fragment visibility judgment