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 相关文章推荐
golang、python、php、c++、c、java、Nodejs性能对比
Mar 12 NodeJs
nodejs事件的监听与触发的理解分析
Feb 12 NodeJs
基于html5和nodejs相结合实现websocket即使通讯
Nov 19 NodeJs
nodejs实现bigpipe异步加载页面方案
Jan 26 NodeJs
nodejs利用http模块实现银行卡所属银行查询和骚扰电话验证示例
Dec 30 NodeJs
详解nodejs爬虫程序解决gbk等中文编码问题
Apr 06 NodeJs
详解nodeJS之二进制buffer对象
Jun 03 NodeJs
nodejs操作mongodb的增删改查功能实例
Nov 09 NodeJs
nodejs初始化init的示例代码
Oct 10 NodeJs
NodeJS读取分析Nginx错误日志的方法
May 14 NodeJs
NodeJS实现一个聊天室功能
Nov 25 NodeJs
node快速搭建后台的实现步骤
Feb 18 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 解决旧系统 查出所有数据分页的类
2012/08/27 PHP
PHP速成大法
2015/01/30 PHP
PHP实现将视频转成MP4并获取视频预览图的方法
2015/03/12 PHP
php计算两个文件相对路径的方法
2015/03/14 PHP
php分页原理 分页代码 分页类制作教程
2016/09/23 PHP
php基于协程实现异步的方法分析
2019/07/17 PHP
Jquery 获取表单text,areatext,radio,checkbox,select值的代码
2009/11/12 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(二)人物行走的实现
2013/01/23 Javascript
Js动态添加复选框Checkbox的实例方法
2013/04/08 Javascript
JQuery工具函数汇总
2015/06/15 Javascript
localResizeIMG先压缩后使用ajax无刷新上传(移动端)
2015/08/11 Javascript
学习JavaScript正则表达式
2015/11/13 Javascript
jQuery Select下拉框操作小结(推荐)
2016/07/22 Javascript
jQuery实现简易的输入框字数计数功能示例
2017/01/16 Javascript
超全面的JavaScript开发规范(推荐)
2017/01/21 Javascript
简单实现bootstrap导航效果
2017/02/07 Javascript
深入理解Vue生命周期、手动挂载及挂载子组件
2017/09/27 Javascript
JS实现的简单下拉框联动功能示例
2018/05/11 Javascript
谈谈我在vue-cli3中用预渲染遇到的坑
2020/04/22 Javascript
[01:04]DOTA2:伟大的Roshan雕塑震撼来临
2015/01/30 DOTA
[00:33]2018DOTA2亚洲邀请赛TNC出场
2018/04/04 DOTA
Python中常见的数据类型小结
2015/08/29 Python
用python实现简单EXCEL数据统计的实例
2017/01/24 Python
APIStar:一个专为Python3设计的API框架
2018/09/26 Python
解决Python下imread,imwrite不支持中文的问题
2018/12/05 Python
python日期相关操作实例小结
2019/06/24 Python
浅谈对pytroch中torch.autograd.backward的思考
2019/12/27 Python
python 代码实现k-means聚类分析的思路(不使用现成聚类库)
2020/06/01 Python
使用python编写一个语音朗读闹钟功能的示例代码
2020/07/14 Python
Alpine安装Python3依赖出现的问题及解决方法
2020/12/25 Python
英国家居用品和家居装饰品购物网站:Cox & Cox
2019/08/25 全球购物
在C语言中"指针和数组等价"到底是什么意思?
2014/03/24 面试题
体育专业个人的求职信范文
2013/09/21 职场文书
生产车间实习自我鉴定
2013/09/23 职场文书
党员个人自我剖析材料
2014/10/08 职场文书
教师网络培训心得体会
2016/01/09 职场文书