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如何搭建Web服务器
Mar 28 NodeJs
Nodejs全局安装和本地安装的不同之处
Jul 04 NodeJs
利用nodejs监控文件变化并使用sftp上传到服务器
Feb 18 NodeJs
nodejs爬虫遇到的乱码问题汇总
Apr 07 NodeJs
详解nodeJS之二进制buffer对象
Jun 03 NodeJs
nodejs模块学习之connect解析
Jul 05 NodeJs
nodejs实现的连接MySQL数据库功能示例
Jan 25 NodeJs
nodejs express配置自签名https服务器的方法
May 22 NodeJs
NodeJS如何实现同步的方法示例
Aug 24 NodeJs
nodejs 使用 js 模块的方法实例详解
Dec 04 NodeJs
nodejs使用socket5进行代理请求的实现
Feb 21 NodeJs
Nodejs环境实现socket通信过程解析
Jul 03 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使用DOM和simplexml读取xml文档的方法示例
2017/02/08 PHP
PHP 实现公历日期与农历日期的互转换
2017/09/13 PHP
php实现socket推送技术的示例
2017/12/20 PHP
同一个表单 根据要求递交到不同页面的实现方法小结
2009/08/05 Javascript
替代window.event.srcElement效果的可兼容性的函数
2009/12/18 Javascript
jQuery EasyUI API 中文文档 - MenuButton菜单按钮使用介绍
2011/10/06 Javascript
javascript中的window.location.search方法简介
2013/09/02 Javascript
浅谈jquery中delegate()与live()
2015/06/22 Javascript
JavaScript之AOP编程实例
2015/07/17 Javascript
jQuery实现仿微软首页感应鼠标变化滑动窗口效果
2015/10/08 Javascript
JavaScript优化专题之Loading and Execution加载和运行
2016/01/20 Javascript
全国省市二级联动下拉菜单 js版
2016/05/10 Javascript
浅谈JavaScript中数组的增删改查
2016/06/20 Javascript
Move.js入门
2017/02/08 Javascript
Angular4 ElementRef的应用
2018/02/26 Javascript
Vue基本使用之对象提供的属性功能
2019/04/30 Javascript
bootstrap实现嵌套模态框的实例代码
2020/01/10 Javascript
javascript设计模式 ? 单例模式原理与应用实例分析
2020/04/09 Javascript
js实现QQ邮箱邮件拖拽删除功能
2020/08/27 Javascript
[40:05]LGD vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
[55:35]DOTA2-DPC中国联赛 正赛 CDEC vs Dragon BO3 第二场 1月22日
2021/03/11 DOTA
python对html代码进行escape编码的方法
2015/05/04 Python
linux下python抓屏实现方法
2015/05/22 Python
浅谈python字典多键值及重复键值的使用
2016/11/04 Python
用Q-learning算法实现自动走迷宫机器人的方法示例
2019/06/03 Python
PyQt5基本控件使用之消息弹出、用户输入、文件对话框的使用方法
2019/08/06 Python
纯HTML5+CSS3制作生日蛋糕(代码易懂)
2016/11/16 HTML / CSS
斯凯奇美国官网:SKECHERS美国
2016/08/20 全球购物
Lookfantastic香港官网:英国知名美妆购物网站
2018/06/19 全球购物
美国最受欢迎的度假目的地优惠套餐:BookVIP
2018/09/27 全球购物
男女钓鱼靴和甲板鞋:XTRATUF
2021/01/09 全球购物
元旦晚会上单位领导演讲稿
2014/01/05 职场文书
公司活动策划方案
2014/01/13 职场文书
2015年教师节贺卡寄语
2015/03/24 职场文书
DBCA命令行搭建Oracle ADG的流程
2021/06/11 Oracle
springboot 启动如何排除某些bean的注入
2021/08/02 Java/Android