小应用项目需求:
创建一个文件夹myweb,我们的程序能够自动为里面的文件、图片、css、js加上路由。
//day1\09.js
//路由机制小应用 自动目录读取
var http=require("http");
var fs=require("fs");
var url=require("url");
var path=require("path");
var querystring=require("querystring");
//准备一个映射关系对
var mime={
".jpg":"image/jpeg",
".jpeg":"image/jpeg",
".gif": "image/gif",
".png": "image/png",
".html":"text/html;charset=UTF-8",
".css":"text/css",
".js":"application/x-javascript"
}
var server=http.createServer(function(req,res){
//设置response响应头部
res.setHeader("Content-Type","text/html;charset=UTF-8");
//得到用户读取什么
//url.parse(req.url) 将url转为对象。
var pathname=url.parse(req.url).pathname;
//得到拓展名
var extname=path.extname(pathname);
if(!extname){
//如果不是以/结尾,此时会造成浏览器识别图片路径层次有问题。
//比如http://127.0.0.1/b和http://127.0.0.1/b/ 不一样。
//前者认为是统计目录下的图片,后者认为是b文件夹中的。
if(pathname.substr(-1)!="/"){
//检查是否有 "/"
res.writeHead(302,{"Location": pathname+"/"});
}
pathname+="/index.html";
}
//真的读取这个文件
fs.readFile("./myweb/"+pathname,function(err,data){
if(err){
res.end("没有这个文件");
return;
}
//检查是否属于我已知的mime类型
if(mime.hasOwnProperty(extname)){
res.setHeader("content-type",mime[extname]);
}
res.end(data);
});
});
server.listen(3000,"127.0.0.1");
console.log("server start at 3000 port");