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实现的一个简单udp广播服务器、客户端
Sep 25 NodeJs
浅谈Nodejs观察者模式
Oct 13 NodeJs
你一定会收藏的Nodejs代码片段
Feb 04 NodeJs
NodeJS遍历文件生产文件列表功能示例
Jan 22 NodeJs
用nodejs搭建websocket服务器
Jan 23 NodeJs
Nodejs 发送Post请求功能(发短信验证码例子)
Feb 09 NodeJs
详解nodejs实现本地上传图片并预览功能(express4.0+)
Jun 28 NodeJs
详解NODEJS基于FFMPEG视频推流测试
Nov 17 NodeJs
nodejs简单实现TCP服务器端和客户端的聊天功能示例
Jan 04 NodeJs
nodejs初始化init的示例代码
Oct 10 NodeJs
nodejs实现聊天机器人功能
Sep 19 NodeJs
详解利用nodejs对本地json文件进行增删改查
Sep 20 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中return 和 exit 、break和contiue 区别与用法
2012/04/09 PHP
yum命令安装php7和相关扩展
2016/07/04 PHP
laravel 数据迁移与 Eloquent ORM的实现方法
2019/04/12 PHP
javascript自定义startWith()和endWith()的两种方法
2013/11/11 Javascript
jQuery实现指定内容滚动同时左侧或其它地方不滚动的方法
2015/08/08 Javascript
BootStrap制作导航条实例代码
2016/05/06 Javascript
CheckBox多选取值及判断CheckBox选中是否为空的实例
2017/10/31 Javascript
vue router-link传参以及参数的使用实例
2017/11/10 Javascript
vue中使用axios post上传头像/图片并实时显示到页面的方法
2018/09/27 Javascript
微信小程序拍照和摄像功能实现方法示例
2019/02/01 Javascript
对vue中的事件穿透与禁止穿透实例详解
2019/10/28 Javascript
node.js中fs文件系统模块的使用方法实例详解
2020/02/13 Javascript
浅谈Python程序与C++程序的联合使用
2015/04/07 Python
使用C#配合ArcGIS Engine进行地理信息系统开发
2016/02/19 Python
Python简单获取自身外网IP的方法
2016/09/18 Python
python实现读取并显示图片的两种方法
2017/01/13 Python
Python优先队列实现方法示例
2017/09/21 Python
Python实现的计算器功能示例
2018/04/26 Python
Python模拟登录的多种方法(四种)
2018/06/01 Python
python url 参数修改方法
2018/12/26 Python
原生python实现knn分类算法
2019/10/24 Python
python Tensor和Array对比分析
2020/01/08 Python
阿玛尼化妆品美国官网:Giorgio Armani Beauty
2017/02/02 全球购物
英国汽车座椅和婴儿车购物网站:Uber Kids
2017/04/19 全球购物
荷兰家电购物网站:Expert.nl
2020/01/18 全球购物
Java的五个基础面试题
2016/02/26 面试题
党的群众路线查摆剖析材料
2014/10/10 职场文书
2015年农村党员公开承诺事项
2015/04/28 职场文书
《酸的和甜的》教学反思
2016/02/18 职场文书
商业计划书格式、范文
2019/03/21 职场文书
行政后勤人员工作计划应该怎么写?
2019/08/16 职场文书
Django cookie和session的应用场景及如何使用
2021/04/29 Python
详解PHP Swoole与TCP三次握手
2021/05/27 PHP
Redis缓存-序列化对象存储乱码问题的解决
2021/06/21 Redis
《金肉人》米特&《航海王》阿鹤声优松岛实因胰脏癌去世 享寿81岁
2022/04/13 日漫
CSS SandBox应用场景及常见问题
2022/06/25 HTML / CSS