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:

<body>
    <div>首页</div>
    <form method="post" action="/login">
        <ul>
            <li>账号:<input type="text" name="id"/></li>
            <li>密码:<input type="text" name="pwd"/></li>
            <li><input type="submit" value="登录"/></li>
        </ul>
    </form>
</body>

login.ejs:

<body>
    <div>登录成功!</div>
    <div><%=id%></div>
    <div><%=pwd%></div>
</body>

目录:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值