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

原文地址:https://www.cnblogs.com/loaderman/p/11504912.html

时间: 2024-10-10 01:52:48

Nodejs封装一个类似express框架的路由的相关文章

封装一个类似jquery的ajax方法

//封装一个类似jquery的ajax方法,当传入参数,就可以发送ajax请求 //参数格式如下{ // type:"get"/"post", // dataType:"json"/"jsonp", // url:"地址", // data:{key:value} // success:function(){ // } // } //还需要一个跨域方法,可以访问远程服务器的数据 function myAja

简单模拟jQuery创建对象的方法,以及封装一个js动画框架

今天无事点开了N年未点开的慕课网,看了一个js动画框架的视频,心血来潮用jQuery的方法封装了一下,虽然不如jQuery,但是还是有点点所获. 什么都不说,直接上代码: /** * 这是框架的唯一对象,使用jQuery框架的创建方法 * @class MyAnimation * @constructor */ function MyAnimation(Selector){ //返回MyAnimation原型链中init()方法创建的对象 return new MyAnimation.proto

express 框架之 路由

先看一段测试代码: 1 var express = require('express'); 2 3 var app = express(); 4 var router = express.Router(); 5 6 app.get('/', function(req, res){ 7 console.log('test1'); 8 }); 9 10 app.use('/', function(req, res){ 11 console.log('test2'); 12 }); 13 14 rou

wndows程序设计之书籍知识与代码摘录-封装一个类似printf的messagebox

//----------------------------------------- //本程序展示了如何实现MessageBoxPrintf函数 //本函数能像printf那样格式化输出 //摘录自:<windows程序设计第五版> //----------------------------------------- #include<windows.h> #include<tchar.h> #include<stdio.h> int CDECL Me

基于WSGI封装一个简单WEB框架

from wsgiref.simple_server import make_serverdef index(): return 'index'def login(): return 'login'def routes(): urlpatterns=( ('/index',index), ('/login',login), ) return urlpatternsdef runserver(environ,start_response): start_response('200 OK' , [(

nodejs学习笔记二:解析express框架项目文件

上一章介绍了如何去创建一个express框架的工程项目,这章介绍一下express框架下的文件和用法解析,上一张我们创建的工程项目结构图如下: models是不属于原工程项目结构,为了实现数据模型后添加的,而node_modules这个文件夹内存放着项目需要的中间件,public是存放静态文件的文件夹,routes顾名思义就是路由解析文件的所在,views就是ejs模板引擎的视图文件,app.js是项目运行的入口存放着全局大量的配置,package.json是加载第三方包的配置文件.下面来一一解

Node.js中的express框架获取http参数

最近本人在学习开发NodeJs,使用到express框架,对于网上的学习资料甚少,因此本人会经常在开发中做一些总结. express获取参数有三种方法:官网介绍如下 Checks route params (req.params), ex: /user/:id Checks query string params (req.query), ex: ?id=12 Checks urlencoded body params (req.body), ex: id=1.例如:127.0.0.1:3000

浅析Express中的路由与应用模式

1. 引言 Express是一个基于Node.js的轻量级web开发框架,具有体积小,使用灵活等特点.查看Express的源码,如果不计供使用的中间件,主体框架只有一千余行代码,非常简练. Express模型的核心为Express中定义的路由和路由器.分析Express源码可发现Express的路由提供多种灵活的应用模式. 我们首先介绍一下Express中的路由.路由器相关概念.结构及其特点,然后针对典型场景描述使用Express路由的四种应用模式. 2.Express中的路由与路由器 Expr

类似express的路由封装方式

1.原理 主要过程涉及三个元素的定义,如下: //用于承载一系列方法的对象 var funObj = {}; //用于根据条件执行funObj中的方法 var app = function(){}; //用于向funObj添加方法 app.get = function(){}; 2.具体实现 a. 路由框架的封装(route.js) //========================== // 类似express的路由框架 //========================== var ur