上次介绍了创建静态的web服务器,今天来聊聊它的pro版,简单的封装和整合。
文件目录
创建简单的服务器封装(server.js)
var http=require('http');
var router=require('./router');
http.createServer(function(req,res){
router(req,"static",res)
}).listen(8100);
封装的router(router.js)
// 导入fs模块
var fs=require('fs');
// 导入path模块
var path=require('path');
var url=require('url');
var Extname=require('./Extname.js');
module.exports=(req,static,res)=>{
// 在这里对路径解析 获取pathname 避免get传值等影响
var pathname=url.parse(req.url).pathname;
if(pathname!="/favicon.ico"){
if(pathname=="/"){
pathname="index.html";
}
// 根据目录去找到对应的文件
fs.readFile(static+"/"+pathname,function(error,data){
if(error){
console.log(404);
return false;
}
// aname为文件后缀名,根据后缀在extname.js中匹配文件类型
var aname=path.extname(pathname);
// console.log(aname);
var exname=Extname(aname);
res.writeHead(200,{"Content-Type":""+exname+";charset=UTF-8"});
res.write(data);
res.end();
});
}
}
Mine.js (用于调用总文件名称的数据)
var fs=require("fs");
var data=null;
//读取文件
//异步获取数据暂时外边拿不到
// fs.readFile("mime.json",function (err,res){
// if(err)
// {
// console.log("404");
// return false;
// }
// data=JSON.parse(res.toString());
// });
data=JSON.parse(fs.readFileSync("mime.json").toString());
module.exports=data;
mine.json直接去npm.js上搜就好了,数据有点多,所以抱歉
Extname.js (获取文件的类型)
var mim=require("./Mime.js");
module.exports=function (exname){
// 有个小bug,拿到的值没有去 . 所以下面把点去了
// console.log(exname.slice(1));
return mim[exname.slice(1)];
// 如果没有mime.json文件可以用下面简单替代
// var type="";
// switch(exname)
// {
// case ".html": type="text/html";break;
// case ".css": type="text/css";break;
// case ".js": type="text/javascript";break;
// case ".json": type="text/json";break;
// default : type="text/html";break;
// }
// return type;
}
staic中放置静态文件就好