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和PhantomJS抓取网站页面信息以及网站截图
Nov 18 NodeJs
nodejs获取本机内网和外网ip地址的实现代码
Jun 01 NodeJs
轻松创建nodejs服务器(9):实现非阻塞操作
Dec 18 NodeJs
Nodejs中的this详解
Mar 26 NodeJs
Nodejs学习item【入门手上】
May 05 NodeJs
NodeJS遍历文件生产文件列表功能示例
Jan 22 NodeJs
nodejs入门教程三:调用内部和外部方法示例
Apr 24 NodeJs
NodeJs模拟登陆正方教务
Apr 28 NodeJs
nodejs mysql 实现分页的方法
Jun 06 NodeJs
nodejs中函数的调用实例详解
Oct 31 NodeJs
NodeJs生成sitemap站点地图的方法示例
Jun 11 NodeJs
nodejs脚本centos开机启动实操方法
Mar 04 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 禁止页面缓存输出
2009/01/07 PHP
PHP 获取MySQL数据库里所有表的实现代码
2011/07/13 PHP
php之curl设置超时实例
2014/11/03 PHP
php 参数过滤、数据过滤详解
2015/10/26 PHP
PHP利用二叉堆实现TopK-算法的方法详解
2017/04/24 PHP
jQuery 位置插件
2008/12/25 Javascript
jQuery中delegate和on的用法与区别详细解析
2014/01/26 Javascript
Eclipse去除js(JavaScript)验证错误
2014/02/11 Javascript
JavaScript 正则表达式中global模式的特性
2016/02/25 Javascript
bootstrap模态框消失问题的解决方法
2016/12/02 Javascript
微信小程序之仿微信漂流瓶实例
2016/12/09 Javascript
bootstrap table 表格中增加下拉菜单末行出现滚动条的快速解决方法
2017/01/05 Javascript
深入浅析javascript继承体系
2017/10/23 Javascript
快速解决vue动态绑定多个class的官方实例语法无效的问题
2018/09/05 Javascript
如何用RxJS实现Redux Form
2018/12/29 Javascript
js实现点赞按钮功能的实例代码
2020/03/06 Javascript
jquery实现简易验证插件封装
2020/09/13 jQuery
[01:34]DAC2018主赛事第四日五佳镜头 Gh巨牙海民助Miracle-死里逃生
2018/04/07 DOTA
Python中文编码那些事
2014/06/25 Python
python中list循环语句用法实例
2014/11/10 Python
python实现在windows服务中新建进程的方法
2015/06/30 Python
在Django的URLconf中使用命名组的方法
2015/07/18 Python
Python列表原理与用法详解【创建、元素增加、删除、访问、计数、切片、遍历等】
2019/10/30 Python
python实现音乐播放和下载小程序功能
2020/04/26 Python
在pycharm中文件取消用 pytest模式打开的操作
2020/09/01 Python
CSS3的first-child选择器实战攻略
2016/04/28 HTML / CSS
Html5新增标签有哪些
2017/04/13 HTML / CSS
Shopty西班牙:缝纫机在线销售
2018/01/26 全球购物
Java中实现多态的机制
2015/08/09 面试题
简历上的自我评价怎么写
2014/01/28 职场文书
小学教师节活动方案
2014/01/31 职场文书
道德大讲堂实施方案
2014/05/14 职场文书
外联部演讲稿
2014/05/24 职场文书
煤矿安全知识竞赛活动总结
2014/07/07 职场文书
食品安全演讲稿
2014/09/01 职场文书
运动会运动员赞词
2015/07/22 职场文书