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 相关文章推荐
PHPStorm 2020.1 调试 Nodejs的多种方法详解
Sep 17 NodeJs
nodejs中exports与module.exports的区别详细介绍
Jan 14 NodeJs
Nodejs极简入门教程(一):模块机制
Oct 25 NodeJs
NodeJS仿WebApi路由示例
Feb 28 NodeJs
nodejs入门教程五:连接数据库的方法分析
Apr 24 NodeJs
NodeJs模拟登陆正方教务
Apr 28 NodeJs
nodejs制作爬虫实现批量下载图片
May 19 NodeJs
nodejs中安装ghost出错的原因及解决方法
Oct 23 NodeJs
nodejs实现套接字服务功能详解
Jun 21 NodeJs
nodejs 十六进制字符串型数据与btye型数据相互转换
Jul 30 NodeJs
深入理解NodeJS 多进程和集群
Oct 17 NodeJs
Nodejs中怎么实现函数的串行执行
Mar 02 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
ThinkPHP中调用PHPExcel的实现代码
2017/04/08 PHP
PHP的curl函数的用法总结
2019/02/14 PHP
php自定义排序uasort函数示例【二维数组按指定键值排序】
2019/06/19 PHP
一个加密JavaScript的开源工具PACKER2.0.2
2006/11/04 Javascript
JS 分号引起的一段调试问题
2009/06/18 Javascript
javascript 解析后的xml对象的读取方法细解
2009/07/25 Javascript
按下Enter焦点移至下一个控件的实现js代码
2013/12/11 Javascript
JavaScript实现当网页加载完成后执行指定函数的方法
2015/03/21 Javascript
JQuery跳出each循环的方法
2015/04/16 Javascript
javascript实现验证身份证号的有效性并提示
2015/04/30 Javascript
跨域请求的完美解决方法(JSONP, CORS)
2016/06/12 Javascript
详解Python中logging日志模块在多进程环境下的使用
2016/12/26 Javascript
详解vue-resource promise兼容性问题
2017/06/20 Javascript
Nginx 配置多站点vhost 的方法
2018/01/07 Javascript
JavaScript表格隔行变色和Tab标签页特效示例【附jQuery版】
2019/07/11 jQuery
JS实现iframe中子父页面跨域通讯的方法分析
2020/03/10 Javascript
js仿淘宝放大镜效果
2020/12/28 Javascript
跟老齐学Python之Python安装
2014/09/12 Python
详解JavaScript编程中的window与window.screen对象
2015/10/26 Python
Python3 XML 获取雅虎天气的实现方法
2018/02/01 Python
Python定时任务随机时间执行的实现方法
2019/08/14 Python
python Manager 之dict KeyError问题的解决
2019/12/21 Python
在Python中通过threshold创建mask方式
2020/02/19 Python
PyQt5.6+pycharm配置以及pyinstaller生成exe(小白教程)
2020/06/02 Python
俄罗斯最大的香水和化妆品网上商店:Randewoo
2020/11/05 全球购物
软件测试笔试题
2012/10/25 面试题
文员自我评价怎么写
2013/09/19 职场文书
七年级音乐教学反思
2014/01/26 职场文书
舞蹈比赛获奖感言
2014/02/04 职场文书
参观接待方案
2014/03/17 职场文书
初中家长寄语
2014/04/02 职场文书
2015年卫生院健康教育工作总结
2015/07/24 职场文书
2016高中社会实践心得体会范文
2016/01/14 职场文书
《童年》读后感(三篇)
2019/08/27 职场文书
教你怎么用Python监控愉客行车程
2021/04/29 Python
Win10本地连接不见了怎么恢复? win10系统电脑本地连接不见了解决方法
2023/01/09 数码科技