1、目录结构
2、getmimefromfile_events.js
//这是一个函数
exports.getMime=function(fs,extname,EventEmitter){ /*获取后缀名的方法*/
//.html
console.log('1');
fs.readFile('./mime.json',function(err,data){
if(err){
console.log('mime.json文件不存在');
return false;
}
//console.log(data.toString());
var Mimes=JSON.parse(data.toString());//把json字符串转换为json对象
console.log('------------' + Mimes[extname]);
console.log('2');
var result = Mimes[extname] || 'text/html';
EventEmitter.emit('name01',result);//发送事件,名为'name01',发送的数据为result
});
console.log('3');
}
3、06service_events.js
//引入http模块
var http=require('http');
//fs模块
var fs=require('fs');
//path模块
var path=require('path'); /*nodejs自带的模块*/
//url模块
var url=require('url');
//引入扩展名的方法是在文件里面获取到的。
var mimeModel=require('./model/getmimefromfile_events.js');
//引入事件驱动器events
var events = require('events')
var EventEmitter = new events.EventEmitter();
//console.log(mimeModel.getMime('.css')); //获取文件类型
http.createServer(function(req,res){
//http://localhost:8001/news.html /news.html
//http://localhost:8001/index.html /index.html
//css/dmb.bottom.css
//xxx.json?214214124
var pathname=url.parse(req.url).pathname;//使用url.parse()进行对请求的url进行过滤
console.log(pathname);
if(pathname=='/'){
pathname='/index.html'; /*默认加载的首页*/
}
//获取文件的后缀名
var extname=path.extname(pathname);
if(pathname!='/favicon.ico'){ /*过滤请求favicon.ico*/
//console.log(pathname);
//文件操作获取 static下面的index.html
fs.readFile('static/'+pathname,function(err,data){//在static目录下寻找文件
if(err){ /*么有这个文件*/
console.log('404');
fs.readFile('static/404.html',function(error,data404){
if(error){
console.log(error);
}
res.writeHead(404,{"Content-Type":"text/html;charset='utf-8'"});
res.write(data404);
res.end(); /*结束响应*/
})
}else{ /*返回这个文件*/
//调用函数,传入EventEmitter
var mime=mimeModel.getMime(fs,extname,EventEmitter);
//监听事件,注册的事件名为'name01',mime为收到的发送过来的数据
EventEmitter.on('name01',function(mime){
res.writeHead(200,{"Content-Type":""+mime+";charset='utf-8'"});
//res.write(data); //因为要报write after end异常,所以将该行注释掉,在end()中写入数据
res.end(data); /*结束响应*/
});
}
})
}
}).listen(8002);