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入门详解(多篇文章结合)
Mar 07 NodeJs
轻松创建nodejs服务器(8):非阻塞是如何实现的
Dec 18 NodeJs
nodejs实现获取当前url地址及url各种参数值
Jun 25 NodeJs
快速掌握Node.js之Window下配置NodeJs环境
Mar 21 NodeJs
NodeJS和BootStrap分页效果的实现代码
Nov 07 NodeJs
深入浅析Nodejs的Http模块
Jun 20 NodeJs
nodejs实现大文件(在线视频)的读取
Oct 16 NodeJs
Linux Centos7.2下安装nodejs&amp;npm配置全局路径的教程
May 15 NodeJs
nodejs 如何手动实现服务器
Aug 20 NodeJs
NodeJS实现同步的方法
Mar 02 NodeJs
NodeJs入门教程之定时器和队列
Mar 08 NodeJs
nodejs中使用worker_threads来创建新的线程的方法
Jan 22 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数据库抽象层 PDO
2011/05/07 PHP
php 实现进制相互转换
2016/04/07 PHP
PHP常见字符串处理函数用法示例【转换,转义,截取,比较,查找,反转,切割】
2016/12/24 PHP
js+css在交互上的应用
2010/07/18 Javascript
jquery lazyload延迟加载技术的实现原理分析
2011/01/24 Javascript
jQuery EasyUI API 中文文档 - Tabs标签页/选项卡
2011/10/01 Javascript
jQuery-Easyui 1.2 实现多层菜单效果的代码
2012/01/13 Javascript
php跨域调用json的例子
2013/11/13 Javascript
js获取当前页面的url网址信息
2014/06/12 Javascript
深入探寻javascript定时器
2015/01/02 Javascript
ajax实现动态下拉框示例
2017/01/10 Javascript
javascript基础知识讲解
2017/01/11 Javascript
微信小程序基于本地缓存实现点赞功能的方法
2017/12/18 Javascript
浅谈React Native 传参的几种方式(小结)
2019/05/21 Javascript
Layui数据表格判断编辑输入的值,是否为我需要的类型详解
2019/10/26 Javascript
Vue使用轮询定时发送请求代码
2020/08/10 Javascript
vue 在单页面应用里使用二级套嵌路由
2020/12/19 Vue.js
[42:34]VP vs VG 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python使用asyncio包处理并发详解
2017/09/09 Python
为什么选择python编程语言入门黑客攻防 给你几个理由!
2018/02/02 Python
python网络编程 使用UDP、TCP协议收发信息详解
2019/08/29 Python
简单了解Python3 bytes和str类型的区别和联系
2019/12/19 Python
Python使用os.listdir和os.walk获取文件路径
2020/05/21 Python
简单介绍一下pyinstaller打包以及安全性的实现
2020/06/02 Python
Python实现敏感词过滤的4种方法
2020/09/12 Python
用pip给python安装matplotlib库的详细教程
2021/02/24 Python
Corelle官方网站:购买康宁餐具
2016/11/02 全球购物
idealfit英国:世界领先的女性健身用品和运动衣物品牌
2017/11/25 全球购物
J2SDK1.5与J2SDK5.0有什么区别
2012/09/19 面试题
编程用JAVA解析XML的方式
2013/07/07 面试题
爱心捐书活动总结
2014/07/05 职场文书
三八红旗手主要事迹材料
2015/11/04 职场文书
2016年禁毒宣传活动总结
2016/04/05 职场文书
导游词之四川武侯祠
2019/10/21 职场文书
MySQL分区路径子分区再分区
2022/04/13 MySQL
SQL Server使用PIVOT与unPIVOT实现行列转换
2022/05/25 SQL Server