• 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();
  • 相关阅读:
    redis基本介绍搭建篇
    Percona XtraDB Cluster集群
    path模块
    vue相关
    Vue首页加载过慢 解决方案
    从用户输入url到页面最后呈现 发生了些什么?
    cookie
    javascript中怎么判断对象{}为空
    jquery之stop()的用法
    跨域
  • 原文地址:https://www.cnblogs.com/loaderman/p/11504912.html
Copyright © 2020-2023  润新知