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框架Express的模板视图机制分析
Jul 19 NodeJs
Nodejs进阶:如何将图片转成datauri嵌入到网页中去实例
Nov 21 NodeJs
Nodejs高扩展性的模板引擎 functmpl简介
Feb 13 NodeJs
NodeJS仿WebApi路由示例
Feb 28 NodeJs
Nodejs基于LRU算法实现的缓存处理操作示例
Mar 17 NodeJs
NodeJS、NPM安装配置步骤(windows版本) 以及环境变量详解
May 13 NodeJs
Nodejs搭建wss服务器教程
May 24 NodeJs
详解nodejs实现本地上传图片并预览功能(express4.0+)
Jun 28 NodeJs
Windows下使用Nodejs运行js的方法
Sep 02 NodeJs
详解使用vscode+es6写nodejs服务端调试配置
Sep 21 NodeJs
nodejs 日志模块winston的使用方法
May 02 NodeJs
nodejs 十六进制字符串型数据与btye型数据相互转换
Jul 30 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实现的功能是显示8条基色色带
2006/10/09 PHP
Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安装配置方法
2007/05/03 PHP
利用php下载xls文件(自己动手写的)
2014/04/18 PHP
日常整理PHP中简单的图形处理(经典)
2015/10/26 PHP
ThinkPHP实现的rsa非对称加密类示例
2018/05/29 PHP
PHP设计模式之适配器模式(Adapter)原理与用法详解
2019/12/12 PHP
FF IE兼容性的修改小结
2009/09/02 Javascript
js的Prototype属性解释及常用方法
2014/05/08 Javascript
Javascript基础教程之变量
2015/01/18 Javascript
简介JavaScript中toUpperCase()方法的使用
2015/06/06 Javascript
jQuery限制图片大小的方法
2016/05/25 Javascript
微信小程序开发之录音机 音频播放 动画实例 (真机可用)
2016/12/08 Javascript
详解JavaScript数组过滤相同元素的5种方法
2017/05/23 Javascript
js封装成插件的步骤方法
2017/09/11 Javascript
vue的状态管理模式vuex
2017/11/30 Javascript
javaScript手机号码校验工具类PhoneUtils详解
2017/12/08 Javascript
浅谈实现vue2.0响应式的基本思路
2018/02/13 Javascript
webpack 打包压缩js和css的方法示例
2018/03/20 Javascript
详解基于Vue/React项目的移动端适配方案
2019/08/23 Javascript
[00:49]完美世界DOTA2联赛10月28日开团时刻:随便打
2020/10/29 DOTA
详解Python迭代和迭代器
2016/03/28 Python
Python开发SQLite3数据库相关操作详解【连接,查询,插入,更新,删除,关闭等】
2017/07/27 Python
Python爬虫实现抓取京东店铺信息及下载图片功能示例
2018/08/07 Python
如何在python字符串中输入纯粹的{}
2018/08/22 Python
python矩阵/字典实现最短路径算法
2019/01/17 Python
Pytorch 抽取vgg各层并进行定制化处理的方法
2019/08/20 Python
Tensorflow安装问题: Could not find a version that satisfies the requirement tensorflow
2020/04/20 Python
HTML5 Canvas如何实现纹理填充与描边(Fill And Stroke)
2013/07/15 HTML / CSS
Spotahome意大利:公寓和房间出租
2020/02/21 全球购物
写一个方法1000的阶乘
2012/11/21 面试题
C#如何进行LDAP用户校验
2012/11/21 面试题
《掌声》教学反思
2014/02/23 职场文书
禁烟标语大全
2014/06/11 职场文书
2014各大专业毕业生自我评价
2014/09/17 职场文书
使用numpy nonzero 找出非0元素
2021/05/14 Python
Mysql如何实现不存在则插入,存在则更新
2022/03/25 MySQL