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中exports与module.exports的区别详细介绍
Jan 14 NodeJs
利用NodeJS的子进程(child_process)调用系统命令的方法分享
Jun 05 NodeJs
轻松创建nodejs服务器(7):阻塞操作的实现
Dec 18 NodeJs
NodeJS远程代码执行
Aug 28 NodeJs
nodejs爬虫遇到的乱码问题汇总
Apr 07 NodeJs
详解使用vscode+es6写nodejs服务端调试配置
Sep 21 NodeJs
Nodejs调用WebService的示例代码
Sep 29 NodeJs
windows系统下更新nodejs版本的方案
Nov 24 NodeJs
NodeJS爬虫实例之糗事百科
Dec 14 NodeJs
基于nodejs的微信JS-SDK简单应用实现
May 21 NodeJs
nodejs一个简单的文件服务器的创建方法
Sep 13 NodeJs
nodejs使用socket5进行代理请求的实现
Feb 21 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+mysql写的留言本
2006/10/09 PHP
作为PHP程序员应该了解MongoDB的五件事
2013/06/03 PHP
php实现在服务器上创建目录的方法
2015/03/16 PHP
CI框架源码解读之URI.php中_fetch_uri_string()函数用法分析
2016/05/18 PHP
php实现对短信验证码发送次数的限制实例讲解
2021/03/04 PHP
javascript中的prototype属性使用说明(函数功能扩展)
2010/08/16 Javascript
web前端开发也需要日志
2010/12/09 Javascript
简单的两种Extjs formpanel加载数据的方式
2013/11/09 Javascript
js修改原型的属性使用介绍
2014/01/26 Javascript
js获取UserControl内容为拼html时提供方便
2014/11/02 Javascript
jquery 中ajax执行的优先级
2015/06/22 Javascript
使用CamanJS在Web页面上处理图像的技巧
2015/08/18 Javascript
javascript数组克隆简单实现方法
2015/12/16 Javascript
Jquery跨域获得Json的简单实例
2016/05/18 Javascript
Vue.js实现简单ToDoList 前期准备(一)
2016/12/01 Javascript
jquery append与appendTo方法比较
2017/05/24 jQuery
ReactNative实现Toast的示例
2017/12/31 Javascript
基于Vue2.X的路由和钩子函数详解
2018/02/09 Javascript
vue axios整合使用全攻略
2018/05/24 Javascript
微信小程序手机号码验证功能的实例代码
2018/08/28 Javascript
vue通过video.js解决m3u8视频播放格式的方法
2019/07/30 Javascript
JavaScript异步操作的几种常见处理方法实例总结
2020/05/11 Javascript
[00:32]2016完美“圣”典风云人物:Maybe宣传片
2016/12/05 DOTA
[00:48]完美“圣”典2016风云人物:xiao8宣传片
2016/11/30 DOTA
python网络编程学习笔记(10):webpy框架
2014/06/09 Python
Python使用reportlab将目录下所有的文本文件打印成pdf的方法
2015/05/20 Python
深入理解Python中range和xrange的区别
2017/11/26 Python
用python给自己做一款小说阅读器过程详解
2019/07/11 Python
使用python将excel数据导入数据库过程详解
2019/08/27 Python
Matplotlib绘制雷达图和三维图的示例代码
2020/01/07 Python
keras 指定程序在某块卡上训练实例
2020/06/22 Python
次世代生活态度:Hypebeast
2018/07/05 全球购物
英国标志性生活方式品牌:Skinnydip London
2019/12/15 全球购物
机电专业毕业生求职信
2013/10/27 职场文书
一篇带你入门Java垃圾回收器
2021/06/16 Java/Android
详解gantt甘特图可拖拽、编辑(vue、react都可用 highcharts)
2021/11/27 Vue.js