// js 执行文件
var fs = require('fs');
// path 模块
var path = require('path');
var http=require('http');
// url 模块
var url = require('url');
var mimeModel=require('./model/getmimeFile.js');
// console.log(mimeModel.getMime(fs,'.html'))
// 创建静态服务
http.createServer(function(req,res){
// 通过文件名获取路径名称
var pathname = url.parse(req.url).pathname;
// 如果路径是 / 默认加载index.html
if(pathname == '/'){
pathname = '/index.html';
}
// 获取文件
var extname = path.extname(pathname);
// 过滤掉 favicon.io 请求
if(extname != '/favicon.io'){
// 读取static 下的文件
fs.readFile('static/'+pathname,function(err,data){
if(err){
console.log('没有这个文件')
// 返回404 页
fs.readFile('static/404.html',function(error,data404){
res.writeHead(404,{"Content-Type":"text/html:charset=utf-8"});
res.write(data404);
res.end();
})
}else{
// 获取文件后缀名
var mime = mimeModel.getMime(fs,extname);
res.writeHead(200,{"Content-type":""+mime+";charset=utf-8"});
res.write(data);
res.end();
}
})
}
}).listen(8003);
// 暴露后缀名接口方法 参数1:fs 模块;参数2:扩展名;
exports.getMime=function(fs,extname){
var data = fs.readFileSync('./mime.json');
var Mime = JSON.parse(data)
return Mime[extname] || 'text/html';//同步
}
/*
将公共部分抽离成模块,对外暴露
*/
var url=require('url');
var fs=require('fs');
var events=require('events');
var path=require('path');
var EventEmitter=new events.EventEmitter();
function getMime(extname){
fs.readFile('./mime.json',function(err,data){
var mimes = JSON.parse(data)[extname];
EventEmitter.emit('to_mime',mimes || 'text/html');
})
}
exports.getRouter=function(req,res){
var pathname=url.parse(req.url).pathname;
if(pathname == '/'){
pathname = '/index.html';
}
var extname=path.extname(pathname);
if(pathname != 'favicon.io'){
fs.readFile('static/'+pathname,function(err,data){
if(err){
console.log('文件不存在');
fs.readFile('static/404.html',function(error,data404){
res.writeHead(404,{"Content-type":"text/html;charset=utf8"})
res.end(data404);
})
}else{
getMime(extname)
EventEmitter.on('to_mime',function(mime){
res.writeHead(200,{"Content-type":""+mime+";charset=utf8"});
res.end(data);
})
}
})
}
}
- 在创建 http.createserver(传入暴露接口).listen(8003)
// 通过对公共方法封装成模块引用
var router=require('./model/router.js');
http.createServer(function(req,res){
router.getRouter(req,res);
}).listen('8000');
// 通过模块化封装可以简化代码,增加阅读性