更新后的代码
以下是今天更新后的代码:
App.js 内容
var http = require("http");
module.exports = App;
function App(){
// 插件有序列表
var middleList = this._middleList = [];
var self = this;
// DOTO , GET方法的处理函数
this._getHandle = null;
// DOTO , POST方法的处理函数
this._postHandle = null;
// request事件响应函数
function handle(req,res){
if(middleList.length === 0){
}else{
// 循环执行插件
var middleIndex = 0; // 插件索引
execMiddle();
// 执行这个函数时,会自动执行下一个middle插件。
// 至于这个函数的执行,是由插件所控制。
function next(){
middleIndex += 1;
execMiddle();
}
// 执行插件函数
function execMiddle(){
var middle = middleList[middleIndex];
if(middle){
middle(req,res,next);
}else{
// 判断是GET还是POST方法
switch(req.method){
case "GET":
if(self._getHandle){
self._getHandle(req,res);
}
break;
case "POST":
if(self._postHandle){
self._postHandle(req,res);
}
break;
}
}
}
}
}
this._server = http.createServer(handle);
}
// 加入功能栈
App.prototype.use = function(middle){
this._middleList.push(middle);
}
App.prototype.get = function(handle){
this._getHandle = handle;
}
App.prototype.post = function(handle){
this._postHandle = handle;
}
// 监听端口
App.prototype.listen = function(){
this._server.listen.apply(this._server,arguments);
}static.js 内容
var url = require("url"),
fs = require("fs");
// 把URL转换成资源路径
function url2path(url_str){
var urlObj = url.parse(url_str);
var path = urlObj.path;
return path;
}
module.exports = function static(parent_path){
return function(req,res,next){ // 这个插件无需调用next。
var path = url2path(req.url);
function callback(err,data){
if(err){
// res.statusCode = 404;
// 如果找不到资源,直接next()
next();
}
else{
res.write(data);
res.end();
}
}
fs.readFile(parent_path+path,callback);
}
}