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

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

以上是 Nodejs封装类似express框架的路由实例详解 的全部内容, 来源链接: utcz.com/z/318168.html

回到顶部