一、路由的简单配置
let http=require("http");
http.createServer((require,response)=>{
let path = url.parse(require.url); //获取路径信息
let pathname=path.pathname; //获取路径
if(pathname!="/favicon.ico"){
//处理掉不需要的“/favicon.ico”请求
response.writeHead(200,{
"Content-Type":"text/html;charset=utf-8;"});
//根据路径依次配置
if(pathname=="/"){
response.end("首页");
}
if(pathname=="/login"){
response.end("登录");
}
if(pathname=="/my"){
response.end("我的");
}
response.end(); //必须在请求后写end方法 否则服务器一直运行
}
}).listen(8000,"127.0.0.1",()=>{
console.log("http://127.0.0.1:8000");
})
二、路由的封装
在上述路由的简单配置下,做以下封装:
1.建立一个路由文件 router.js
2.在文件中添加需要的路由,并暴露出去,以下是以对象的形式暴露
module.exports={
"/":(require,response)=>{
//在此可以进行相关页面的渲染,以下同
response.end("首页");
},
"/login":(require,response)=>{
response.end("登录");
},
"/my":(require,response)=>{
response.end("我的");
},
}
3.在需要的文件引入路由文件
let http = require("http");
let router = require("./router"); //引入路由文件
let path = url.parse(require.url); //获取路径信息
let pathname=path.pathname; //获取路径
http.createServer((require,response)=>{
if(pathname!="/favicon.ico"){
response.writeHead(200,{
"Content-Type":"text/html;charset=utf-8;"});
//以 对象[键值] 的方式去找相应的路径
if(router[pathname]){
//router[pathname] 如果该路径存在
//暴露出的对象中的每个键都是一个函数,执行该函数,并传递相应的参数
router[pathname](require,response);
}else{
response.end("404");
}
}
}
三、获取get和post传值(结合路由)
1.在登录页面造一个表单 提交路径为"/index" get提交方式
/*用户名:admin 密码:12345*/
<form action="/index" method="get">
<ul>
<li><label for="">用户名:</label><input name="userid" type="text"></li>
<li><label for=""> 密码 :</label><input name="userpwd" type="text"></li>
<li><input type="submit"></li>
</ul>
</form>
2.在路由文件 配置 “/index ” 路由时,获取表单传值
module.exports={
"./index":(require,response)=>{
console.log(require.url); ///index?userid=admin&userpwd=12345
let path = url.parse(require.url,true).query; //解析路径,取路径信息的路径值
console.log(path); //path值 即为 获取到的get传值
//输出{ userid: 'admin', userpwd: '12345' }
}
}
3.运行调用路由的界面 即可输出相应的值
1.在登录页面造一个表单 提交路径为"/index" post提交方式
/*用户名:admin 密码:12345*/
<form action="/index" method="post">
<ul>
<li><label for="">用户名:</label><input name="userid" type="text"></li>
<li><label for=""> 密码 :</label><input name="userpwd" type="text"></li>
<li><input type="submit"></li>
</ul>
</form>
2.在路由文件 配置 “/index ” 路由时,获取表单传值
---与get传值不同的是,post传值不能用解析路径的方式直接获取
---post传值需要通过事件车获取
module.exports={
"./index":(require,response)=>{
let info= "?"; //为后边转换为get传值的路径格式
//data事件: 如果有数据可读时,执行后面的回调函数
require.on("data",(result)=>{
info+=result;
})
//end 事件:在数据读取结束后,执行后面的回调函数
require.on("end",()=>{
/*
--info值本为userid=admin&userpwd=12345 类似get传值的路径值(比get路径少个“?”问号)--
--可事先给info赋值为“?” 后续数据追加 将其强行转换为get传值的路径格式,再进行解析--
*/
console.log(info);
//输出?userid=admin&userpwd=12345
console.log( url.parse(info,true).query);
ejs.renderFile("view/index.html",(error,str)=>{
if(error){
throw error;
}
response.end(str);
})
})
}
}