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 npm package.json中文文档
Sep 04 NodeJs
nodejs中转换URL字符串与查询字符串详解
Nov 26 NodeJs
NodeJS学习笔记之Connect中间件模块(二)
Jan 27 NodeJs
nodejs通过phantomjs实现下载网页
May 04 NodeJs
Nodejs实现批量下载妹纸图
May 28 NodeJs
nodejs个人博客开发第一步 准备工作
Apr 12 NodeJs
mac下的nodejs环境安装的步骤
May 24 NodeJs
NodeJs通过async/await处理异步的方法
Oct 09 NodeJs
nodejs(officegen)+vue(axios)在客户端导出word文档的方法
Jul 31 NodeJs
webpack打包nodejs项目的方法
Sep 26 NodeJs
nodeJs项目在阿里云的简单部署
Nov 27 NodeJs
如何利用nodejs自动定时发送邮件提醒(超实用)
Dec 01 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
Yii使用技巧大汇总
2015/12/29 PHP
PHP实现上传图片到 zimg 服务器
2016/10/19 PHP
PHP date()格式MySQL中插入datetime方法
2019/01/29 PHP
jquery click([data],fn)使用方法实例介绍
2013/07/08 Javascript
动态加载js的方法汇总
2015/02/13 Javascript
JQuery 动态生成Table表格实例代码
2016/12/02 Javascript
微信小程序 解决swiper不显示图片的方法
2017/01/04 Javascript
Angular.js ng-file-upload结合springMVC的使用教程
2017/07/10 Javascript
JS实现登录页密码的显示和隐藏功能
2017/12/06 Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变opacity实现)
2019/01/24 Javascript
基于JS开发微信网页录音功能的实例代码
2019/04/30 Javascript
Layui 带多选框表格监听事件以及按钮自动点击写法实例
2019/09/02 Javascript
vue实现数字滚动效果
2020/06/29 Javascript
CentOS 8.2服务器上安装最新版Node.js的方法
2020/12/16 Javascript
浅析python打包工具distutils、setuptools
2018/04/20 Python
使用PYTHON解析Wireshark的PCAP文件方法
2019/07/23 Python
通过实例学习Python Excel操作
2020/01/06 Python
aws 通过boto3 python脚本打pach的实现方法
2020/05/10 Python
Python代码中如何读取键盘录入的值
2020/05/27 Python
详解python安装matplotlib库三种失败情况
2020/07/28 Python
一篇文章搞懂python的转义字符及用法
2020/09/03 Python
python基于opencv 实现图像时钟
2021/01/04 Python
css3实现文字扫光渐变动画效果的示例
2017/11/07 HTML / CSS
HTML5图片预览实例分享
2014/06/04 HTML / CSS
俄罗斯隐形眼镜和眼镜在线商店:Cronos
2020/06/02 全球购物
如何手工释放资源
2013/12/15 面试题
综合实践教学反思
2014/01/31 职场文书
我的求职择业计划书
2014/04/04 职场文书
欢迎领导检查标语
2014/06/27 职场文书
学校学习雷锋活动总结
2014/07/03 职场文书
纪委书记群众路线整改措施思想汇报
2014/10/09 职场文书
给老婆的道歉信
2015/01/20 职场文书
留学推荐信英文范文
2015/03/26 职场文书
幼儿园教学反思范文
2016/03/02 职场文书
Mysql 如何批量插入数据
2021/04/06 MySQL
MySQL的join buffer原理
2021/04/29 MySQL