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中调用系统命令、Shell脚本和Python脚本的方法和实例
Jan 01 NodeJs
nodejs 整合kindEditor实现图片上传
Feb 03 NodeJs
Nodejs中解决cluster模块的多进程如何共享数据问题
Nov 10 NodeJs
nodejs 实现钉钉ISV接入的加密解密方法
Jan 16 NodeJs
详解nodejs微信公众号开发——1.接入微信公众号
Apr 10 NodeJs
手把手教你把nodejs部署到linux上跑出hello world
Jun 19 NodeJs
Nodejs实现文件上传的示例代码
Sep 26 NodeJs
nodejs初始化init的示例代码
Oct 10 NodeJs
nodejs微信开发之自动回复的实现
Mar 17 NodeJs
nodejs nedb 封装库与使用方法示例
Feb 06 NodeJs
Nodejs + sequelize 实现增删改查操作
Nov 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后台程序与Javascript的两种交互方式
2009/10/25 PHP
php XMLWriter类的简单示例代码(RSS输出)
2011/09/30 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
2017/08/28 PHP
thinkPHP5框架设置404、403等http状态页面的方法
2018/06/05 PHP
ThinkPHP5+UEditor图片上传到阿里云对象存储OSS功能示例
2019/08/05 PHP
Prototype ObjectRange对象学习
2009/07/19 Javascript
使用jQuery内容过滤选择器选择元素实例讲解
2013/04/18 Javascript
js Array操作的最简短最容易理解方法
2013/12/09 Javascript
javascript操作excel生成报表示例
2014/05/08 Javascript
Mac OS X 系统下安装和部署Egret引擎开发环境
2014/09/03 Javascript
分享JavaScript与Java中MD5使用两个例子
2015/12/23 Javascript
所见即所得的富文本编辑器bootstrap-wysiwyg使用方法详解
2016/05/27 Javascript
关于vue.js弹窗组件的知识点总结
2016/09/11 Javascript
AngularJS constant和value区别详解
2017/02/28 Javascript
AngularJS路由实现页面跳转实例
2017/03/03 Javascript
JS实现自动轮播图效果(自适应屏幕宽度+手机触屏滑动)
2017/06/19 Javascript
详解Angular的8个主要构造块
2017/06/20 Javascript
JS自定义对象创建与简单使用方法示例
2020/01/15 Javascript
[02:52]2014DOTA2西雅图国际邀请赛 CIS战队巡礼
2014/07/07 DOTA
python BeautifulSoup使用方法详解
2013/11/21 Python
Python简单实现子网掩码转换的方法
2016/04/13 Python
python版本坑:md5例子(python2与python3中md5区别)
2017/06/20 Python
Python3之文件读写操作的实例讲解
2018/01/23 Python
python批量修改图片大小的方法
2018/07/24 Python
Python高级特性切片(Slice)操作详解
2018/09/27 Python
python读取大文件越来越慢的原因与解决
2019/08/08 Python
django使用F方法更新一个对象多个对象字段的实现
2020/03/28 Python
使用Python快速打开一个百万行级别的超大Excel文件的方法
2021/03/02 Python
CSS3实现歌词进度文字颜色填充变化动态效果的思路详解
2020/06/02 HTML / CSS
美国家具网站:Cymax
2016/09/17 全球购物
全球速卖通:AliExpress(国际版淘宝)
2017/09/20 全球购物
服务行业个人求职的自我评价
2013/12/12 职场文书
乡镇平安建设汇报材料
2014/08/25 职场文书
食堂厨师岗位职责
2014/08/25 职场文书
销售内勤岗位职责范本
2015/04/13 职场文书
2015年大学迎新工作总结
2015/07/16 职场文书