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中使用monk访问mongodb
Jul 06 NodeJs
轻松创建nodejs服务器(8):非阻塞是如何实现的
Dec 18 NodeJs
基于Nodejs利用socket.io实现多人聊天室
Feb 22 NodeJs
nodejs实现邮件发送服务实例分享
Mar 29 NodeJs
nodejs使用express创建一个简单web应用
Mar 31 NodeJs
nodejs爬虫遇到的乱码问题汇总
Apr 07 NodeJs
nodejs 子进程正确的打开方式
Jul 03 NodeJs
Nodejs 复制文件/文件夹的方法
Aug 24 NodeJs
详解使用PM2管理nodejs进程
Oct 24 NodeJs
nodejs实现超简单生成二维码的方法
Mar 17 NodeJs
Nodejs异步回调之异常处理实例分析
Jun 22 NodeJs
Nodejs中的JWT和Session的使用
Aug 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
apache+php完美解决301重定向的两种方法
2011/06/08 PHP
PHP中使用php://input处理相同name值的表单数据
2015/02/03 PHP
帝国cms常用标签汇总
2015/07/06 PHP
laravel5.1框架基础之Blade模板继承简单使用方法分析
2019/09/05 PHP
PHP 面向对象程序设计之类属性与类常量实现方法分析
2020/04/13 PHP
JavaScript入门教程(10) 认识其他对象
2009/01/31 Javascript
js表数据排序 sort table data
2009/02/18 Javascript
jQuery图片预加载 等比缩放实现代码
2011/10/04 Javascript
Javascript处理DOM元素事件实现代码
2012/05/23 Javascript
jquery动画3.创建一个带遮罩效果的图片走廊
2012/08/24 Javascript
js整数字符串转换为金额类型数据(示例代码)
2013/12/26 Javascript
响应式表格之固定表头的简单实现
2016/08/26 Javascript
JavaScript 巧学巧用
2017/05/23 Javascript
Vue.js对象转换实例
2017/06/07 Javascript
详解Vue.js分发之作用域槽
2017/06/13 Javascript
理解Angular的providers给Http添加默认headers
2017/07/04 Javascript
详解使用angular的HttpClient搭配rxjs
2017/09/01 Javascript
Vue-router结合transition实现app前进后退动画切换效果的实例
2017/10/11 Javascript
解决element-ui中下拉菜单子选项click事件不触发的问题
2018/08/22 Javascript
Nuxt.js实现校验访问浏览器类型的中间件
2018/08/24 Javascript
Node.js中Koa2在控制台输出请求日志的方法示例
2019/05/02 Javascript
jQuery实现文本显示一段时间后隐藏的方法分析
2019/06/20 jQuery
基于Vue和Element-Ui搭建项目的方法
2019/09/06 Javascript
jquery使用echarts实现有向图可视化功能示例
2019/11/25 jQuery
python指定写入文件时的编码格式方法
2018/06/07 Python
python脚本使用阿里云slb对恶意攻击进行封堵的实现
2021/02/04 Python
html5的localstorage详解
2017/05/09 HTML / CSS
德国化妆品和天然化妆品网上商店:kosmetikfuchs.de
2017/06/09 全球购物
经典C++面试题一
2016/11/06 面试题
建筑系毕业生自我鉴定
2014/01/24 职场文书
护士毕业生自我鉴定
2014/02/08 职场文书
本科毕业生自荐信
2014/06/02 职场文书
MySQL中出现乱码问题的终极解决宝典
2021/05/26 MySQL
详解Redis瘦身指南
2021/05/26 Redis
分位数回归模型quantile regeression应用详解及示例教程
2021/11/02 Python
vue @ ~ 相对路径 路径别名设置方式
2022/06/05 Vue.js