Nodejs封装类似express框架的路由实例详解
代码如下
varhttp=require('http');
varejs=require('ejs');
varapp=require('./model/express-route.js');
console.log(app);
http.createServer(app).listen(3000);
app.get('/',function(req,res){
varmsg='这是数据库的数据'
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("")
})
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
varurl=require('url');
//封装方法改变res绑定res.send()
functionchangeRes(res){
res.send=function(data){
res.writeHead(200,{"Content-Type":"text/html;charset='utf-8'"});
res.end(data);
}
}
//暴露的模块
varServer=function(){
varG=this;/*全局变量*/
//处理get和post请求
this._get={};
this._post={};
varapp=function(req,res){
changeRes(res);
//获取路由
varpathname=url.parse(req.url).pathname;
if(!pathname.endsWith('/')){
pathname=pathname+'/';
}
//获取请求的方式getpost
varmethod=req.method.toLowerCase();
if(G['_'+method][pathname]){
if(method=='post'){/*执行post请求*/
varpostStr='';
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('norouter');
}
}
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){
//
//}
}
returnapp;
}
module.exports=Server();
以上代码很简单,大家可以测试下,如果有任何疑问和补充可以联系小编,更多内容可以查看以下相关知识点。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。