Nodejs封装类似express框架的路由实例详解

代码如下

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();

以上代码很简单,大家可以测试下,如果有任何疑问和补充可以联系小编,更多内容可以查看以下相关知识点。

(0)

相关推荐

  • NodeJS Express框架中处理404页面一个方式

    在用 Express 的时候,路由是我最困惑的事之一.知道用 app.get('*') 可以处理所有页面,但这样除了自定义的其他路由外,静态文件是被忽略的.最近在写一个小工具的时候,找到了一个解决方案: 复制代码 代码如下: var express = require('express'),    router = require('./routes'); var app = module.exports = express.createServer(); // Configurationapp

  • Nodejs express框架一个工程中同时使用ejs模版和jade模版

    在某些项目中,比如你接手了一个别人的项目然后你不想用蛋疼的ejs,或者你不想用蛋疼的jade.你有不想重写之前的页面,那么你现在可能需要新引入ejs或者jade模块,你仅仅需要做下面两步也许就能完成使用两个模版的工作 1.consolidate.js cd 到项目目录: npm install consolidate --save 打开项目的app.js(也许你的叫其他名字) 把app.js的形如下面的代码片段 app.set('view engine', 'jade'); 改为 var eng

  • NodeJs中express框架的send()方法简介

    express框架的send方法 ①send方法用的还挺多的,因此需要明确其作用: ②原型是: res.send([body|status], [body]) 即既可以直接发送内容,也可以第一个参数状态,第二个参数内容. 如果直接发送内容的话,状态会被自动补全: ③发送的内容: 示例: res.send(newBuffer('whoop')); res.send({ some: 'json' }); res.send('some html'); res.send(404, 'Sorry, we

  • Nodejs封装类似express框架的路由实例详解

    代码如下 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},fu

  • NodeJs Express框架实现服务器接口详解

    目录 CORS 跨域资源共享 1. 接口的跨域问题 2. 使用 cors 中间件解决跨域问题 创建基本的服务器 创建 API 路由模块 编写 GET 接口 编写 POST 接口 注意:如果要获取 URL-encoded 格式的请求体数据,必须配置中间件 app.use(express.urlencoded({ extended: false })) CORS 跨域资源共享 1. 接口的跨域问题 <body> <button id="btnGET">GET<

  • Node.js中Express框架的使用教程详解

    目录 Express简介 Express生成器 1. 什么是Express生成器 2. 安装Express生成器 创建Express项目 安装项目依赖 运行Express项目 Express目录结构说明 创建一个新路由模块 1. 创建ejs模块文件 2. 创建路由文件 3. 在app.js中引入路由 4. 运行项目 经过前面几天对Node.js的学习,基本的开发知识已经逐渐掌握,所谓工欲善其事必先利其器,今天进一步学习Node.js的开发框架Express.利用Express框架可以快速的进行W

  • Yii框架核心组件类实例详解

    本文实例讲述了Yii框架核心组件类.分享给大家供大家参考,具体如下: CComponent类为YII框架的基于组件和事件驱动编程提供了基础,YII框架中的大部分类都将CComponent类作为基类. CComponent类为它的子类提供3个特性: 1.成员变量扩展 通过定义两个成员函数(getXXX/setXXX)来定义一个成员变量,比如: public function getText() {-} public function setText {-} 这样就相当于定义了一个$text成员变量

  • Reactjs + Nodejs + Mongodb 实现文件上传功能实例详解

    目录 Reactjs + Nodejs + Mongodb 实现文件上传 概述 React + Node.js + Mongodb「上传文件」前后端项目结构 前端项目结构 Reactjs 前端部分 后端项目结构 后端项目结构 前端部分-上传文件 React + Axios 配置 React 环境 导入 bootstrap 到项目中 初始化 Axios 创建上传文件组件 创建 React 文件上传组件 将文件上传组件添加到App组件 上传文件配置端口 项目运行 后端部分 配置 Node.js 开发

  • yii2的restful api路由实例详解

    yii\rest\UrlRule 使用yii\rest\UrlRule来自动映射控制器的 restful 路由,简单快捷,缺点是必须得按规定好的方法名去写业务. 映射的规则如下,当然,你可以修改源码为你的习惯: public $patterns = [ 'PUT,PATCH {id}' => 'update', 'DELETE {id}' => 'delete', 'GET,HEAD {id}' => 'view', 'POST' => 'create', 'GET,HEAD' =

  • nodeJS express路由学习req.body与req.query方法实例详解

    目录 引言 前端路由 后端路由 Express路由教学 GET/POST路由演示 详解req处理数据的方法 引言 所谓 路由 就是根据不同的 url 地址展示不同的内容或页面 形象点 举个栗子: 电话的拨号界面咱们都见过都使用过 你输入一串号码,就可以拨号给指定的联系人 路由也是这个道理,你请求不同的 url 地址,服务器给你展示不同的内容或页面. 假如我们有一台提供 Web 服务的服务器的网络地址是192.168.1.66:8080 然后我们的服务器下挂载有如下一个资源 192.168.1.6

  • Vue.js框架路由使用方法实例详解

    Vue.js框架路由使用方法实例详解 html代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name='viewport' content='width=device-width,initial-

  • 前端需知nodejs express中间件使用及定义详解

    目录 引言 中间件的定义 中间件的使用 总结 引言 在上一节中我们简单了解了express的路由,本文主要分析下express的另一个核心功能中间件的使用.路由是express整个框架能有如今广泛使用和发展的基础,那中间件就是其发展的养分.正是express丰富的中间件才节省了我们大量的开发时间. 中间件的定义 对于express来说,中间件其实就是一个规定了入参和出参的JavaScript函数,这个函数可以处理请求request和返回response相关的参数,其功能如下: 执行任何代码. 处

  • react框架next.js学习之API 路由篇详解

    目录 正文 使用方式 API 路由匹配 API 处理 API 配置 边缘计算支持 自定义 API 注意点 总结 正文 next.js 作为最热门的 react 框架,不过这么久了好像国内使用率一直不太高.最近在研究做个小项目正好做下笔记,有兴趣的可以一起来学习. next.js 首页标榜的 12 个特性之一就是 API routes,简单的说就是可以 next.js 直接写 node 代码作为后端服务来运行.因此我们可以直接使用 next.js 直接维护一个全栈项目,听起来很香的样子. 使用方式

随机推荐