如何用nodejs手写一个简单但实用的静态服务器?看就完事了
首先,建立项目文件 如图所示:
然后,复制粘贴:(当然我写了注释,作为学习来说,复制是不够的)
- server.js
var http=require('http');
//导入fs模块
var fs=require("fs");
//导入path模块
var path=require("path");
var url=require("url");
var Exname=require("./Extname.js");
http.createServer(function (req,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");
//在页面404时可以请求404页面
return false;
}
//现在数据可以打印出去 但是文件的类型不一致 text/html text/css text/javascript 等等不一致
//根据后缀名 确认类型
var aname=path.extname(pathname);
var exname=Exname(aname);
res.writeHead(200,{"Content-Type":""+exname+";charset=UTF-8"});
res.write(data);
res.end();
});
}
}).listen(8100);
-
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;
}
-
Mime.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;
-
mime.json
大家可以去npm.js去下载,太长了~~~~~~
给大家看一眼成果图
END