Nodejs封装类似express框架的路由实例详解


Posted in NodeJs onJanuary 05, 2020

代码如下

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();

以上代码很简单,大家可以测试下,如果有任何疑问和补充可以联系小编,更多内容可以查看以下相关知识点。

NodeJs 相关文章推荐
NodeJS制作爬虫全过程
Dec 22 NodeJs
Nodejs express框架一个工程中同时使用ejs模版和jade模版
Dec 28 NodeJs
Nodejs中session的简单使用及通过session实现身份验证的方法
Feb 04 NodeJs
详解nodejs 文本操作模块-fs模块(三)
Dec 22 NodeJs
Express与NodeJs创建服务器的两种方法
Feb 06 NodeJs
详解nodejs微信公众号开发——1.接入微信公众号
Apr 10 NodeJs
nodejs对express中next函数的一些理解
Sep 08 NodeJs
nodejs实现爬取网站图片功能
Dec 14 NodeJs
基于nodejs实现微信支付功能
Dec 20 NodeJs
nodeJS服务器的创建和重新启动的实现方法
May 12 NodeJs
详解利用nodejs对本地json文件进行增删改查
Sep 20 NodeJs
nodejs实现百度舆情接口应用示例
Feb 07 NodeJs
nodejs对mongodb数据库的增加修删该查实例代码
Jan 05 #NodeJs
nodejs开发一个最简单的web服务器实例讲解
Jan 02 #NodeJs
nodejs环境使用Typeorm连接查询Oracle数据
Dec 05 #NodeJs
nodejs中使用archive压缩文件的实现代码
Nov 26 #NodeJs
NodeJS实现一个聊天室功能
Nov 25 #NodeJs
Nodejs使用archiver-zip-encrypted库加密压缩文件时报错(解决方案)
Nov 18 #NodeJs
NodeJs crypto加密制作token的实现代码
Nov 15 #NodeJs
You might like
PHP QRCODE生成彩色二维码的方法
2016/05/19 PHP
javascript动画效果类封装代码
2007/08/28 Javascript
IE JS编程需注意的内存释放问题
2009/06/23 Javascript
Mootools 1.2教程 Fx.Morph、Fx选项和Fx事件
2009/09/15 Javascript
jquery实现的一个文章自定义分段显示功能
2014/05/23 Javascript
JavaScript实现的使用键盘控制人物走动实例
2014/08/27 Javascript
利用原生JS与jQuery实现数字线性变化的动画
2017/02/24 Javascript
JS实现线性表的链式表示方法示例【经典数据结构】
2017/04/11 Javascript
详解vue express启动数据服务
2017/07/05 Javascript
微信小程序progress组件使用详解
2018/01/31 Javascript
浅谈vue项目可以从哪些方面进行优化
2018/05/05 Javascript
jQuery+CSS实现的标签页效果示例【测试可用】
2018/08/14 jQuery
Javascript中绑定click事件的四种方式介绍
2018/10/26 Javascript
react写一个select组件的实现代码
2019/04/03 Javascript
JavaScript将数组转换为链表的方法
2020/02/16 Javascript
微信小程序实现打卡签到页面
2020/09/21 Javascript
Python实现的tab文件操作类分享
2014/11/20 Python
Python如何import文件夹下的文件(实现方法)
2017/01/24 Python
Python cookbook(数据结构与算法)在字典中将键映射到多个值上的方法
2018/02/18 Python
Pandas Shift函数的基础入门学习笔记
2018/11/16 Python
python基础知识(一)变量与简单数据类型详解
2019/04/17 Python
python实现两个文件夹的同步
2019/08/29 Python
Python进程的通信Queue、Pipe实例分析
2020/03/30 Python
如何基于windows实现python定时爬虫
2020/05/01 Python
详解python的xlwings库读写excel操作总结
2021/02/26 Python
世界上最大的街头服饰网站:Karmaloop
2017/02/04 全球购物
世界上最好的足球商店:Unisport
2019/03/02 全球购物
初中优秀班集体申报材料
2014/05/01 职场文书
应届本科毕业生求职信
2014/07/23 职场文书
荆州古城导游词
2015/02/06 职场文书
家长高考寄语
2015/02/27 职场文书
Python爬虫爬取全球疫情数据并存储到mysql数据库的步骤
2021/03/29 Python
在HTML5 localStorage中存储对象的示例代码
2021/04/21 Javascript
PHP实现rar解压读取扩展包小结
2021/06/03 PHP
python 网络编程要点总结
2021/06/18 Python
详解SpringBoot异常处理流程及原理
2021/06/21 Java/Android