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 url验证(url-valid)的使用方法
Nov 18 NodeJs
Nodejs中读取中文文件编码问题、发送邮件和定时任务实例
Jan 01 NodeJs
nodejs实现获取当前url地址及url各种参数值
Jun 25 NodeJs
Nodejs学习item【入门手上】
May 05 NodeJs
Nodejs全局安装和本地安装的不同之处
Jul 04 NodeJs
NodeJs下的测试框架Mocha的简单介绍
Feb 22 NodeJs
NodeJs测试框架Mocha的安装与使用
Mar 28 NodeJs
nodejs中sleep功能实现暂停几秒的方法
Jul 12 NodeJs
Nodejs实现爬虫抓取数据实例解析
Jul 05 NodeJs
nodejs 使用nodejs-websocket模块实现点对点实时通讯
Nov 28 NodeJs
NodeJs实现简单的爬虫功能案例分析
Dec 05 NodeJs
Nodejs异步流程框架async的方法
Jun 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新手上路(九)
2006/10/09 PHP
php数字转汉字代码(算法)
2011/10/08 PHP
JavaScript内存管理介绍
2015/03/13 Javascript
javascript实现控制div颜色
2015/07/07 Javascript
深入理解setTimeout函数和setInterval函数
2016/05/20 Javascript
移动端使用localStorage缓存Js和css文的方法(web开发)
2016/09/20 Javascript
原生js实现电商侧边导航效果
2017/01/19 Javascript
JavaScript中为事件指定处理程序的五种方式分析
2018/07/27 Javascript
Next.js项目实战踩坑指南(笔记)
2018/11/29 Javascript
解决Layui数据表格显示无数据提示的问题
2019/11/14 Javascript
JavaScript原生数组函数实例汇总
2020/10/14 Javascript
Python中使用Flask、MongoDB搭建简易图片服务器
2015/02/04 Python
Python的__builtin__模块中的一些要点知识
2015/05/02 Python
用C++封装MySQL的API的教程
2015/05/06 Python
Python读写unicode文件的方法
2015/07/10 Python
Python之Web框架Django项目搭建全过程
2017/05/02 Python
Python实现1-9数组形成的结果为100的所有运算式的示例
2017/11/03 Python
Python实现的对一个数进行因式分解操作示例
2019/06/27 Python
python爬虫 Pyppeteer使用方法解析
2019/09/28 Python
python基于plotly实现画饼状图代码实例
2019/12/16 Python
python pyenv多版本管理工具的使用
2019/12/23 Python
简单了解python filter、map、reduce的区别
2020/01/14 Python
tensorflow 模型权重导出实例
2020/01/24 Python
Tensorflow 模型转换 .pb convert to .lite实例
2020/02/12 Python
Python Numpy 控制台完全输出ndarray的实现
2020/02/19 Python
CSS3中border-radius属性设定圆角的使用技巧
2016/05/10 HTML / CSS
HTML5 visibilityState属性详细介绍和使用实例
2014/05/03 HTML / CSS
波兰珠宝品牌:YES
2019/08/09 全球购物
小学运动会广播稿200字(十二篇)
2014/01/14 职场文书
幼儿园春游活动方案
2014/01/19 职场文书
公民代理授权委托书
2014/09/24 职场文书
公安交警个人对照检查材料思想汇报
2014/10/01 职场文书
华清池导游词
2015/02/02 职场文书
2015年检验科工作总结
2015/04/27 职场文书
升学宴来宾致辞
2015/07/27 职场文书
Python使用sql语句对mysql数据库多条件模糊查询的思路详解
2021/04/12 Python