首页 > 代码库 > nodejs进阶3-路由处理
nodejs进阶3-路由处理
1. 路由选择过程
处理不同的HTTP请求在我们的代码中是一个不同的部分,叫做“路由选择”。
那么,我们接下来就创造一个叫做 路由 的模块吧。我们需要查看HTTP请求,从中提取出请求的URL以及GET/POST参数。
url.parse(string).query | url.parse(string).pathname | | | | | ------ -------------------http://localhost:8888/start?foo=bar&hello=world --- ----- | | | | querystring(string)["foo"] | | querystring(string)["hello"]
2. 路由选择实现代码
新建属于服务器端的路由文件router.js
1 //-----------------router.js--------------------------------2 module.exports={3 login:function(req,res){4 res.write("我是login方法");5 },6 register:function(req,res){7 res.write("我是注册方法");8 }9 }
服务端调用路由,方式和上一节课《nodejs进阶2--函数模块调用》中最后提到的字符串调用函数一样。
1 //---------4_router.js----------- 2 var http = require(‘http‘); 3 var url = require(‘url‘); 4 var router = require(‘./router‘); 5 http.createServer(function (request, response) { 6 response.writeHead(200, {‘Content-Type‘: ‘text/html; charset=utf-8‘}); 7 if(request.url!=="/favicon.ico"){ 8 var pathname = url.parse(request.url).pathname;//得到请求的路径 9 console.log(pathname);10 pathname = pathname.replace(/\//, ‘‘);//替换掉前面的/11 console.log(pathname);12 router[pathname](request,response);13 response.end(‘‘);14 }15 }).listen(8000);16 console.log(‘Server running at http://127.0.0.1:8000/‘);
上面我们用到了node自带模块url。url.path(urlStr):将一个URL字符串转换成对象并返回。
3. url.path(urlStr)实例
下面展示两个url.parse的实例
例1. url.parse(‘http://stackoverflow.com/questions/17184791‘).pathname
结果为:"/questions/17184791"
例2:
1 var url = require(‘url‘); 2 var a = url.parse(‘http://example.com:8080/one?a=index&t=article&m=default‘); 3 console.log(a); 4 5 //输出结果: 6 { 7 protocol : ‘http‘ , 8 auth : null , 9 host : ‘example.com:8080‘ ,10 port : ‘8080‘ ,11 hostname : ‘example.com‘ ,12 hash : null ,13 search : ‘?a=index&t=article&m=default‘,14 query : ‘a=index&t=article&m=default‘,15 pathname : ‘/one‘,16 path : ‘/one?a=index&t=article&m=default‘,17 href : ‘http://example.com:8080/one?a=index&t=article&m=default‘18 }
4. 向页面输出html文件
对于一般的get请求,例如localhost/login 我们需要给浏览器输出个页面login.html,那我们怎么做呢?
首先我们新增两个页面
1.login.html
1 <html>2 <head>3 </head>4 <body>5 登录:6 <p>这是一个段落</p>7 <h1>样式1</h1>8 </body>9 <html>
2.register.html
1 <html>2 <head>3 </head>4 <body>5 注册:6 <p>这是一个段落</p>7 <h1>样式1</h1>8 </body>9 <html>
读取文件的方法,我们放到文件models/file.js里
1 //-------------models/file.js------------------------- 2 var fs= require(‘fs‘); 3 module.exports={ 4 readfile:function(path,callback){ //异步读文件,需要传入回调函数 5 fs.readFile(path, function (err, data) { 6 if (err) { 7 console.log(err); 8 }else{ 9 callback(data);10 }11 });12 console.log("异步方法执行完毕");13 },14 readfileSync:function(path){ //同步读取15 var data = fs.readFileSync(path,‘utf-8‘);16 console.log("同步方法执行完毕");17 return data; 18 }19 }
router.js需要调用文件读取方法,把两个页面html文件读取出内容并输出到response。需要注意的是:res.end()这句话的位置,如果用异步读文件的方法就不能放到server创建那块了
1 //-----------------router.js-------------------------------- 2 var file = require(‘./models/file‘); 3 module.exports={ 4 login:function(req,res){ 5 var callback=function(data){ 6 res.write(data); 7 res.end(); 8 } 9 file.readfile(‘./views/login.html‘,callback);//使用异步读取10 },11 register:function(req,res){12 var data=http://www.mamicode.com/file.readfileSync(‘./views/register.html‘);//使用同步读取13 res.write(data);14 res.end();15 }16 }
我们重新运行:node 4_router.js。分别在浏览器输入http://localhost:8000/login 和http://localhost:8000/register ,输出了login.html和register.html页面的内容。
nodejs进阶3-路由处理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。