node.js的路由机制--路由表

我们之前的案例,不管我们访问3000端口的什么网址,都能得到同样的结果.如果我们要根据用户访问的网址,给用户不同的显示.此时就需要使用req的url属性来进行判断:
下面是整个代码:`
var http=require(“http”);
var fs=require(“fs”);
var server=http.createServer((req,res)=> {
//统一设置一下header
res.setHeader(“Content-Type”,“text/html;charset=UTF-8;”);

 if(req.url=="/"){
 	res.end("首页");
 }else if(req.url=="/music"){
	 res.end("音乐频道");
 }else if(req.url=="/news"){
	 res.end("新闻频道");
 }else if(/^\/student\/[\d]{6}$/.test(req.url)){
	var reg=/\/student\/([\d]{6})/;
	//提取学号,使用exec函数,方括号1表示提取$1.
	var xuehao=reg.exec(req.url)[1];
	//读取文本文件(就是我们的模拟数据)
	 fs.readFile("./db.json",function (err,data) {
		 if(err){
		 	res.end("文件读取失败");
		 	return;
		 }
		 //转为对象,注意用readFile读取进来的文件一定要toString()一下
		 var dataObj=JSON.parse(data.toString());
		 console.log(dataObj);
		 //看看"数据库"中是否有这个学生
		 if(dataObj.hasOwnProperty(xuehao)){
			 res.write("<h1>学生信息,学号:"+xuehao+"</h1>");
			 res.write("<h2>姓名:"+dataObj[xuehao]["xingming"]+"</h2>");
			 res.write("<h3>语文:"+dataObj[xuehao]["yuwen"]+"</h3>");
			 res.write("<h4>数学:"+dataObj[xuehao]["shuxue"]+"</h4>");
			 //最后一定要加上end,没有end的话网页的小菊花会一直在转圈
			 res.end("");
		 }else{
			 res.end("<h1>我们学校没有这个学生</h1>");
		 }
	 })
 }else{
	 res.end("对不起,没有这个频道");
 }

});
server.listen(3000);`

在这里对代码进行一下解析:

 - 首先req里面是用户的访问的请求信息,请求的网址当然是req了.res是用户的响应信息.
 - 事实上,我们并不存在music文件夹,news文件夹,设置我们可以伪装一个地址:如if(req.url == "/music.html"){}.所以可以证明Node.js是没有Apache的,是没有真实屋里文件映射关系的.这叫做顶层路由设计.能够制作顶层路由设计的语言比较流行的仅有NodeJS和Python.
 - 额外补充一点:如果不熟悉exec方法的同学,可以自己看看api,exec是最好用的正则方法. 

这里我们结合fs模块做了一个小小的学生管理系统,顶层路由可以设计的非常漂亮.比如:
http://127.0.0.1:3000/student/100002
就是检索100001号学生的情况.比这种php的路由
http://127.0.0.1:3000/student.php?xuehao=100002
不知道高明到哪里去了.后面江之岛,这种风格的路由叫做RESTFUL风格.

猜你喜欢

转载自blog.csdn.net/bhq1711617151/article/details/87967016