Nodejs封装一个类似express框架的路由

var http=require('http');

var ejs=require('ejs');

var app=require('./model/express-route.js');

console.log(app);

http.createServer(app).listen(3000);

app.get('/',function(req,res){

    var msg='这是数据库的数据'

    ejs.renderFile('views/index.ejs',{msg:msg},function(err,data){

        res.send(data);
    })
})


//登录页面
app.get('/login',function(req,res){

    console.log('login');

    ejs.renderFile('views/form.ejs',{},function(err,data){

        res.send(data);
    })

})

//执行登录
app.post('/dologin',function(req,res){

    console.log(req.body);  /*获取post传过来的数据*/

    res.send("<script>alert('登录成功');history.back();</script>")
})


app.get('/register',function(req,res){

    console.log('register');

    res.send('register');
})

app.get('/news',function(req,res){

    console.log('register');

    res.send('新闻数据');
})

express-route.js

var url=require('url');

//封装方法改变res  绑定res.send()
function changeRes(res){

    res.send=function(data){

        res.writeHead(200,{"Content-Type":"text/html;charset='utf-8'"});

        res.end(data);
    }
}

//暴露的模块
var Server=function(){


    var G=this;   /*全局变量*/

    //处理get和post请求
    this._get={};

    this._post={};



    var app=function(req,res){


        changeRes(res);

        //获取路由
        var pathname=url.parse(req.url).pathname;
        if(!pathname.endsWith('/')){
            pathname=pathname+'/';
        }

        //获取请求的方式 get  post
        var method=req.method.toLowerCase();


        if(G['_'+method][pathname]){

            if(method=='post'){ /*执行post请求*/

                var postStr='';
                req.on('data',function(chunk){

                    postStr+=chunk;
                })
                req.on('end',function(err,chunk) {

                    req.body=postStr;  /*表示拿到post的值*/


                    //G._post['dologin'](req,res)

                    G['_'+method][pathname](req,res); /*执行方法*/

                })



            }else{ /*执行get请求*/
                G['_'+method][pathname](req,res); /*执行方法*/

            }

        }else{

            res.end('no router');
        }

    }

    app.get=function(string,callback){
        if(!string.endsWith('/')){
            string=string+'/';
        }
        if(!string.startsWith('/')){
            string='/'+string;

        }

        //    /login/
        G._get[string]=callback;

    }

    app.post=function(string,callback){
        if(!string.endsWith('/')){
            string=string+'/';
        }
        if(!string.startsWith('/')){
            string='/'+string;

        }
        //    /login/
        G._post[string]=callback;

        //G._post['dologin']=function(req,res){
        //
        //}
    }

    return app;

}

module.exports=Server();

猜你喜欢

转载自www.cnblogs.com/loaderman/p/11504912.html