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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。