Node 模拟express框架的路由封装

App.js:

var http=require("http");
var app=require("./router");
var ejs=require("ejs");
http.createServer(app).listen(8100);
//注册路由
app.get("/",function(req,res){
    ejs.renderFile("./static/index.ejs","",function(err,str){
        res.send(str);
    });
});
//get
/*app.get("/login",function(req,res){
    var data=req.body;
    ejs.renderFile("./static/login.ejs",data,function(err,str){
        res.send(str);
    });
});*/
//post
app.post("/login",function(req,res){
    var data=req.body;
    ejs.renderFile("./static/login.ejs",data,function(err,str){
        res.send(str);
    });
});

router.js:

//模拟express路由写法
var url=require("url");
var obj={};
obj._get={};
obj._post={};
var app=function(req,res){
    res.send=function(data){
        res.writeHead(200,{"Content-Type":"text/html;charset=utf-8"});
        res.end(data);
    }
    //找当前req请求的method方式
    var method=req.method.toLowerCase();
    var path=url.parse(req.url,true);
    var pathname=path.pathname;
    if(path=="/favicon.ico") return;

    //根据路径判断路由有没有  如果有则执行路由的方法,即执行注册路由
    if(obj["_"+method][pathname]){
        if(method=="get"){
            req.body=path.query;
              //路由方法
            obj["_"+method][pathname](req,res);
        }
        else{
            var result="?";
            req.on("data",function(str){
                result+=str;
            });
            req.on("end",function(){
                //post传值解析出来直接给req.body属性
                req.body=url.parse(result,true).query;
                //路由方法
                obj["_"+method][pathname](req,res);
            });
        }
    }
    else{
        res.end("404");
    }
}
//封装get方法  在对象上生成路由 
app.get=function(string,callback){
    obj._get[string]=callback;
}
//封装post方法
app.post=function(string,callback){
    obj._post[string]=callback;
}
module.exports=app;

index.ejs:


    
首页
  • 账号:
  • 密码:

login.ejs:


    
登录成功!
<%=id%>
<%=pwd%>

目录:
Node 模拟express框架的路由封装_第1张图片

你可能感兴趣的:(node,node)