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
Jan 24 NodeJs
nodeJs链接Mysql做增删改查的简单操作
Feb 04 NodeJs
nodejs入门教程二:创建一个简单应用示例
Apr 24 NodeJs
详解nodejs微信jssdk后端接口
May 25 NodeJs
深入解析nodejs HTTP服务
Jul 25 NodeJs
nodejs对express中next函数的一些理解
Sep 08 NodeJs
nodejs使用http模块发送get与post请求的方法示例
Jan 08 NodeJs
nodejs 生成和导出 word的实例代码
Jul 31 NodeJs
NodeJS搭建HTTP服务器的实现步骤
Oct 12 NodeJs
NodeJs 文件系统操作模块fs使用方法详解
Nov 26 NodeJs
NodeJs操作MongoDB教程之分页功能以及常见问题
Apr 09 NodeJs
linux 下以二进制的方式安装 nodejs
Feb 12 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
Oracle 常见问题解答
2006/10/09 PHP
非常不错的MySQL优化的8条经验
2008/03/24 PHP
PHP 在线翻译函数代码
2009/05/07 PHP
PHP 处理TXT文件(打开/关闭/检查/读取)
2013/05/13 PHP
PHP时间戳格式全部汇总 (获取时间、时间戳)
2016/06/13 PHP
PHP 验证身份证是否合法的函数
2017/02/09 PHP
thinkPHP+ajax实现统计页面pv浏览量的方法
2017/03/15 PHP
php中文语义分析实现方法示例
2019/09/28 PHP
基于jquery的finkyUI插件与Ajax实现页面数据加载功能
2010/12/03 Javascript
页面右下角弹出提示框示例代码js版
2013/08/02 Javascript
jquery中ajax函数执行顺序问题之如何设置同步
2014/02/28 Javascript
js+css实现select的美化效果
2016/03/24 Javascript
Node.js的npm包管理器基础使用教程
2016/05/26 Javascript
基于JavaScript Array数组方法(新手必看篇)
2016/08/20 Javascript
JS比较两个数值的大小实例
2016/11/25 Javascript
详解vue-router 路由元信息
2017/09/13 Javascript
使用vux实现上拉刷新功能遇到的坑
2018/02/08 Javascript
AngularJS监听ng-repeat渲染完成的方法
2018/03/20 Javascript
JavaScript去掉数组重复项的方法分析【测试可用】
2018/07/19 Javascript
Angular7中创建组件/自定义指令/管道的方法实例详解
2019/04/02 Javascript
Vue自定义全局Toast和Loading的实例详解
2019/04/18 Javascript
如何在Vue中使localStorage具有响应式(思想实验)
2020/07/14 Javascript
在树莓派2或树莓派B+上安装Python和OpenCV的教程
2015/03/30 Python
Python处理JSON数据并生成条形图
2016/08/05 Python
使用Python实现将list中的每一项的首字母大写
2019/06/11 Python
使用pickle存储数据dump 和 load实例讲解
2019/12/30 Python
python实现图片素描效果
2020/09/26 Python
python 使用paramiko模块进行封装,远程操作linux主机的示例代码
2020/12/03 Python
Hoka One One法国官网:美国专业跑鞋品牌
2018/12/29 全球购物
中式结婚主持词
2014/03/14 职场文书
机关党员进社区活动总结
2014/07/05 职场文书
化学工程专业求职信
2014/08/10 职场文书
廉政承诺书
2015/01/19 职场文书
房产公证书
2015/01/23 职场文书
爱心捐书倡议书
2015/04/27 职场文书
python自动化调用百度api解决验证码
2021/04/13 Python