首页 > express 中间件 子路由
头像
搞个宵夜778
发布于 2021-02-09 17:36
+ 关注

express 中间件 子路由

const express = require("express");//调用npm下载到node_moudle的express模块(npm i express -S)
/* 
 npm使用方法:
	到node官网上去下载对应你电脑的node版本,然后安装;
	不需要更改路径,若更改路径,则需要配置系统环境变量(鼠标右击图标计算机->属性->高级系统设置->环境变量),不会就百度!!!
	安装好之后,npm就有了,下载node自带的。
	npm -v  node-v 查看版本
 npm intall moudleName -S(等同于--save) 将模块下载到"服务"环境,就是你开发和项目维护运行都要用的环境。
 简写:npm i moudleName -S || -D 大写:若是其他的写法(不写,小写,-G),将会下载到node的安装路径之下(global)。
 npm intall moudleName -D(等同于--Dev) 将模块下载到开发环境,就是你开发需要、项目维护运行不需要的环境。
 npm list:列举出当前环境下的模块有哪些,后面可以加参数:-D(开发下) -S(开发与维护)。
 
require("moudleName"):该函数可以调用npm下载好的模块,也可以引入自己写好的模块
	引入自己的模块:需要在被引入的模块里面导出你需要的东西:moudle.exports = ...(可以是变量名,也可以是函数表达式)
	引入的各个模块之间不存在变量名冲突的问题
*/
const path = require("path");//这是个内置的路径模块,直接用就行
const app = express();//返回一个app实例对象
// console.log(app);

app.use(express.json());
app.use(express.urlencoded({extended:true})); 
//人家写好的基于express用来处理前后端数据的方法,直接用就行了
//这两个是默认写法,这是express模块已经写好的方法,直接可以用来处理数据。
//直接在中间件函数内使用req.query(get方式请求写法)、req.body(post方式请求写法)就可以获取发送过来的数据。
/* 
	原始方法:
	var str = "";
	req.on("data",function (data) {    
	   str += data;   
		
	});   
	req.on("end",function () {
	   console.log(str);  
	   res.end("ok");   
		
   });
*/

/* 
	中间件:其实就是一个函数,可以用来处理下面模块的重复性部分。(就是前面插入use方法)
	简单来说 在来到第一个接口之前 有个拦截器,这个拦截器中的路径是/, 所有的接口都先走这个拦截器,在这个拦截器里做逻辑处理,
	允许它继续往下走就加next() ,不允许往下走就不用加next(), 例如:验证token,就可以在中间件里进行:
		app.use("/",(req,res,next)=>{
		    console.log("中间件")
		    let token = req.query;
		    if(token){
		        next()  //  是否继续往下执行
		    }else{
		        res.send("缺少token")
		    }
		})
	=>比如:我们在根路由设置了公共的东西,那样每个子路由就不用设置了
		@:  但是需要执行next(),不然就会一直转圈圈;没有使用公共数据的路由不受影响!!!
			(监听的路由不依赖、“经过”前面设置中间件的路由)
*/

app.listen(5555);
/* 
	不设置端口监听,前端页面就会访问不到;
	一般用到的是1到65535,其中0不使用;
	一般的应用程序使用1024到4999用来通讯;
	5000以后的用来用户自定义端口 ;
 */

/*
	监听路由,可以是app.get,app.post,app.use、app.all(get、post均可),等等
	/表示服务器根路由;
	req:前端请求对象;
	res:后端返回对象;
	next:需要在内部执行next();不然浏览器就会停留在公共资源设置的地方!!!
*/
app.get("/",(req,res,next)=>{
	// res.send("122")//返回字符串数据,不能是数字,不然会被当做状态码返回,404,400,200
	res.sendFile(path.join(__dirname,"./static/index.html"));
	//返回文件类型的数据(需要设置为绝对路径,不然会报错,这里使用到了path模块的path.join(__dirname,"相对路径"))
	//res.send  res.sendFile  同时只能执行一个,每一个也只能执行一次,多次执行就会报错,因为已经返回过了
})
	//.....省略很多的监听!!!
	
/*
	require()的使用好处:
	
	当我们需要监听多个子路由时,全部写在当前这个文件之下,就会很冗余,而且后期很难去维护。
	所以:
		把中间件函数写成require()函数即可,意思就是用require引入已经设置好的相对应路由的请求。
		上面只是基本的写法,但是为了规范,以后我们就需要写成require的形式了!!!	
*/
app.get("/index",require("./route/index"));
/* 
	index.js(引入路由是省略了后缀名,任何文件都可以当做路由!!!)
	此文件只需要返回一个中间件函数,使用我们写成下面的样子
	module.exports = (req,res)=>{
		res.send("这是根路由下的一个首页");
		//res.sendFile();
	}
*/

//多重路由怎么办???
/* 
 当一个"根路由"下有多个子路由是时(当你需要访问多层路由时),需要把前面所有的路径都加上,这样很麻烦。
 如:
	app.get("/A/B/C",require(""))    app.get("/A/B/C/D/E",require(""))
	我们可不可以不加"根路由"直接访问子路由呢???
		==>其实并不是不用写,只是我们去require引入的文件里面写了!!!
		中心思想:其实就是俄罗斯套娃,在子路由的中间件函数(require内的文件)内一层一层的往下面写,最后返回router对象!!!
	当然可以:
		此时需要在require引入的文件内部多余写上express模块方法:express.Router();
	==>family.js文件:
		const express = require("express");
		const path = require("path");
		
 -->!!! const router = express.Router();
		
		router.get("/",(req,res)=>{
			res.send("这是family首页");
		})
		router.use("/father",require("./father"));
		router.use("/mother",require("./mother"));
		router.use("/son",require("./son"));
		module.exports = router;
		1.如果你需要在此页面引用子路由,则必须要用use()
		2.如果子路由又需要子子路由,则需要在他自己的文件内用use()设置子路由,
		3.但是获取自己本身的页面可以使用get,post 
		example:(子子子页面father文件)
			const express = require("express");
			const path = require("path");
			
			const router = express.Router();
			router.get("/",(req,res)=>{
				res.send("这是father首页");
			})
			module.exports = router;
	 */

//	!!!用 use 才能使用子路由(父级必须用use,子集必须设置router.use子文件)。app.get(),app.post()都不行<已经试验过了>
app.use("/family",require("./route/family"));

/* 虽然不能直接使用app.get(),app.post,但是我们可以在中间键函数内去判断,从而作出相对应的响应。
	app.use("/family/father",(req,res)=>{
	    if (req.method === "GET") {
	        res.send("这是正确的,访问到了/family/father");
	    }else if (req.method === "POST"){
	        res.send("请使用get");
	    }
	});
*/

/* 
	404返回页
	不设置路由,找不到的时候就执行下面的方法(可自由设置返回内容)
	app.use不给路由必须要放在所有的路由请求后面,不然后面的请求就没有用了,都是404页面了!!! 
*/
app.use((req,res)=>{
	res.send("404哟");
})


全部评论

(0) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期精华帖

热门推荐