后端路由(2018/11/07)
一、后端路由
const http = require("http")
const fs = require("fs");
const data = require("./a")
var ser = http.createServer((req,res)=>{
if(req.url ==="favicon.ico") return;
res.writeHead(200,{'Content-Type':'text/html;charset="utf-8"'});
var content = fs.readFileSync("./replace.html","utf-8");
content = content.replace("{name}",data.name);
content = content.replace("{age}",data.age);
console.log(req.url)
if(req.url === "/"){
res.end(content);
}else if(req.url === "/a"){
res.write(content)
res.end("a route")
}
})
ser.listen(4000,()=>{
console.log("listen "+ser.address().port+"...");
})
二、静态资源处理
path模块: 获取文件扩展名
path.extname() //返回path路径文件扩展名,如果path以 ‘.' 为结尾,将返回 ‘.',如果无扩展名 又 不以'.'结尾,将返回空值。
path.extname('index.html'); // returns '.html'
path.extname('index.'); // returns '.'
path.extname('index'); // returns ''
const path = require("path”);//引入path模块
var extname = path.extname(req.url)//返回文件的后缀
if(extname === ".png"){//如果后缀是.png
res.writeHead(200,{'Content-Type':'image/png'});//内容类型为 图片
var imgcontent = fs.readFileSync('./'+req.url);
res.end(imgcontent)
}
静态资源处理 对于。路径/css/img/js的链接请求处理
const http = require("http");
const fs = require("fs");
const data = require("./a")
const path = require("path");
var ser = http.createServer((req,res)=>{
var extname = path.extname(req.url)
if(req.url ==="favicon.ico") return;
res.writeHead(200,{'Content-Type':'text/html;charset="utf-8"'});
var content = fs.readFileSync("./replace.html","utf-8");
content = content.replace("{name}",data.name);
content = content.replace("{age}",data.age);
console.log(req.url)
if(req.url === "/"){
res.end(content);
}else if(extname === ".png"){//如果一个文件夹里有许多.png文件 那么都会被读取到
res.writeHead(200,{'Content-Type':'image/png'});
var imgcontent = fs.readFileSync('./'+req.url); //同步读取文件
res.end(imgcontent)
}else if(extname === ".css"){
res.writeHead(200,{'Content-Type':'text/css'});
fs.createReadStream("./"+req.url).pipe(res)//流的方式读取文件
}
})
ser.listen(4000,()=>{
console.log("listen "+ser.address().port+"...");
})
三、mime-types
mime-types
获取文件类型(头部文件)
下载
cnpm i mime-types
mimeTypes.lookup() //可以返回对应的content-type 类型
访问jq版本号
jQuery.fn.jquery
const http = require("http");
const fs = require("fs");
const data = require("./a")
const path = require("path");
const mimeTypes = require("mime-types");
var ser = http.createServer((req,res)=>{
var extname = path.extname(req.url)
if(req.url ==="favicon.ico") return;
res.writeHead(200,{'Content-Type':'text/html;charset="utf-8"'});
var content = fs.readFileSync("./replace.html","utf-8");
content = content.replace("{name}",data.name);
console.log(req.url)
if(req.url === "/"){
res.end(content);
}else {
fs.stat("./"+req.url,(err,data)=>{
if(!err){
res.writeHead(200,{'Content-Type':mimeTypes.lookup(extname)});
fs.createReadStream("./"+req.url).pipe(res);
}else{
res.writeHead(200,{'Content-Type':"text/html;charset=utf-8"});
res.end("404网页没找到")
}
})
}
})
ser.listen(4000,()=>{
console.log("listen "+ser.address().port+"...");
})
四、接受get提交的方式
url模块
url.parse
将字符串转换为对象的形式
如果加true 则将query转换为对象
url.format
将对象拼为字符串
Https 443
http 80
//这是用parse被转化为对象的url
//url.parse(req.url,true) 有true的时候将query转化成对象
a.json
{"age":15,"name":"eee"}
replace.html
<!DOCTYPE html>
<html lang="en">
<link rel="stylesheet" href="c.css">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="js/jquery.js"></script>
</head>
<body>
<img src="./bd_logo1.png">
姓名{name}年龄{age}
<input type="text" id="txt" />
<button id="btn">提交</button>
<script>
$("#btn").click(function(){
$.get("http://localhost:4000/modify",{//发送一个请求 一个modify请求
username:$("#txt").val()
}).then((res)=>{
console.log(res)
})
})
</script>
</body>
</html>
ser.js
const http = require("http");
const fs = require("fs");
const data = require("./a");
const path = require("path");
const url = require("url");
const mimeTypes = require('mime-types');
var ser = http.createServer((req,res)=>{
var obj = url.parse(req.url,true); //query转为对象
console.log(obj)
var extname = path.extname(req.url);
if(req.url==="/favicon.ico") return;
res.writeHead(200,{'Content-type':'text/html;charset=utf8'});
// fs.createReadStream("./replace.html").pipe(res);
var content = fs.readFileSync("./replace.html","utf-8");
if(obj.pathname==="/modify"){
var username = obj.query.username;
data.name = username;
fs.writeFileSync("./a.json",JSON.stringify(data));
res.writeHead(200,{"Content-type":'application/json'});
res.end(JSON.stringify({ret:true}));
}
else{
fs.stat("./"+req.url,(err,data)=>{
if(!err){
res.writeHead(200,{"Content-type":mimeTypes.lookup(extname)});
fs.createReadStream("./"+req.url).pipe(res);
}
else{
res.writeHead(200,{"Content-type":'text/html;charset=utf8'});
res.end("404页面没找到啊");
}
})
}
//js application/x-javascript json application/json
})
ser.listen(3000,()=>{
console.log(`listen${ser.address().port}...`)
})
五、接受post提交的方式
querystring模块 用来进行字符串的改变
parse 把字符串变为对象
stringify 把对象变为字符串
ser.js
const http = require("http");
const fs = require("fs");
const data = require("./a");
const path = require("path");
const url = require("url");
var qs = require("querystring");
const mimeTypes = require('mime-types');
var ser = http.createServer((req,res)=>{
console.log(req.url)
var extname = path.extname(req.url);
if(req.url==="/favicon.ico") return;
res.writeHead(200,{'Content-type':'text/html;charset=utf8'});
// fs.createReadStream("./replace.html").pipe(res);
var content = fs.readFileSync("./replace.html","utf-8");
if(req.url==="/modify"){
var username="";
req.on("data",(str)=>{
username+=str;
})
req.on('end',()=>{
var obj = qs.parse(username)
data.name=obj.username;
fs.writeFileSync("./a.json",JSON.stringify(data));
res.writeHead(200,{"Content-type":'application/json'});
res.end(JSON.stringify({ret:true}));
})
}
else{
fs.stat("./"+req.url,(err,data)=>{
if(!err){
res.writeHead(200,{"Content-type":mimeTypes.lookup(extname)});
fs.createReadStream("./"+req.url).pipe(res);
}
else{
res.writeHead(200,{"Content-type":'text/html;charset=utf8'});
res.end("404页面没找到啊");
}
})
}
//js application/x-javascript json application/json
})
ser.listen(3000,()=>{
console.log(`listen${ser.address().port}...`)
})

浙公网安备 33010602011771号