设为首页 收藏本站
查看: 903|回复: 0

[经验分享] 大熊君大话NodeJS之------(Url,QueryString,Path)模块

[复制链接]

尚未签到

发表于 2017-2-22 11:52:34 | 显示全部楼层 |阅读模式
  一,开篇分析
  这篇文章把这三个模块拿来一起说,原因是它们各自的篇幅都不是很长,其次是它们之间存在着依赖关系,所以依次介绍并且实例分析。废话不多说了,请看下面文档:
  (1),"Url模块"
DSC0000.png

  来个小栗子:  



1 var url = require('url');
2 var queryUrl = "http://localhost:8888/bb?name=bigbear&memo=helloworld" ;
3 console.log(typeof url.parse(queryUrl)) ;
4 console.log(url.parse(queryUrl)) ;
  运行结果: 



1 object // typeof
2
3 {
4     protocol: 'http:',
5     slashes: true,
6     auth: null,
7     host: 'localhost:8888',
8     port: '8888',
9     hostname: 'localhost',
10     hash: null,
11     search: '?name=bigbear&memo=helloworld',
12     query: 'name=bigbear&memo=helloworld',
13     pathname: '/bb',
14     path: '/bb?name=bigbear&memo=helloworld',
15     href: 'http://localhost:8888/bb?name=bigbear&memo=helloworld'
16 }
  加以说明如下:  
  protocol: 请求协议
    host: URL主机名已全部转换成小写, 包括端口信息
    auth:URL中身份验证信息部分
    hostname:主机的主机名部分, 已转换成小写
    port: 主机的端口号部分
    pathname: URL的路径部分,位于主机名之后请求查询之前
    search: URL 的“查询字符串”部分,包括开头的问号。
    path: pathname 和 search 连在一起。
    query: 查询字符串中的参数部分(问号后面部分字符串),或者使用 querystring.parse() 解析后返回的对象。
    hash: URL 的 “#” 后面部分(包括 # 符号)
    

 补充api:"url.format(urlObj)"
     DSC0001.png
   作用:输入一个 URL 对象,返回格式化后的 URL 字符串。
  (2),"QueryString模块"
DSC0002.png

  "QueryString" 模块用于实现URL参数字符串与参数对象的互相转换,来个栗子,如下所示:



1 var url = require('url');
2 var qs = require('querystring');
3 var queryUrl = "http://localhost:8888/bb?name=bigbear&memo=helloworld" ;
4 queryUrl = url.parse(queryUrl).query ;
5 console.log(queryUrl) ;
6 console.log(qs.parse(queryUrl)) ;
  运行结果·如下:
     name=bigbear&memo=helloworld
      {
        name: 'bigbear',
        memo: 'helloworld'
      }
    补充api:
    querystring.stringify(obj, [sep], [eq])------序列化一个对象到一个 query string。
    可以选择是否覆盖默认的分割符('&')和分配符('=')。            
    querystring.stringify({foo: 'bar', baz: 'qux'}, ';', ':')// 返回如下字串'foo:bar;baz:qux'
    querystring.parse(str, [sep], [eq], [options])------将一个 query string 反序列化为一个对象。可以选择是否覆盖默认的分割符('&')和分配符('=')。
  
  options对象可能包含maxKeys属性(默认为1000),它可以用来限制处理过的键(key)的数量.设为0可以去除键(key)的数量限制.
  
  示例:querystring.parse('foo=bar&baz=qux&baz=quux&corge') // { foo: 'bar', baz: ['qux', 'quux'], corge: '' }

  (3),"Path模块"
DSC0003.png

  本模块包含一套用于处理和转换文件路径的工具集。几乎所有的方法仅对字符串进行转换, 文件系统是不会检查路径是否真实有效的。
  先来一个简单的栗子:    



1 var url = require('url');
2 var qs = require('querystring');
3 var path = require("path") ;
4 var queryUrl = "http://localhost:8888/bb?name=bigbear&memo=helloworld" ;
5 var root = path.basename(queryUrl) ;
6 console.log(root) ; // bb?name=bigbear&memo=helloworld
  返回路径中的最后一部分,以”/“分割。



1 var url = require('url');
2 var qs = require('querystring');
3 var path = require("path") ;
4 var queryUrl = "http://localhost:8888/bb?name=bigbear&memo=helloworld" ;
5 var root = path.basename(queryUrl) ;
6 console.log(root) ; // bb?name=bigbear&memo=helloworld
7 var ext = path.extname(root) ;
8 console.log(ext || "Not Ext Name !") ; // Not Ext Name !
  由于api过多,以上只列出来了常用的几个,大家需认真阅读文档。
  二,综合栗子
  场景描述------服务器接到不同情况的请求,通过“Url” 分别做不同处理,代码如下:
  (1),建立”index.html“  



1 <!doctype html>
2 <html>
3     <head>
4         <title>Bigbear</title>
5         <meta content="IE=8" http-equiv="X-UA-Compatible"/>
6         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
7         <style type="text/css">
8             div {
9                 margin-top: 50px;
10                 width: 100%;
11                   margin: 0px;
12                 height:120px;
13                 line-height:120px;
14                   color:#fff;
15                   font-size:22px;
16                   background:#ff9900;
17                 text-align: center;
18             }
19         </style>
20         <script src="index.js"></script>
21     </head>
22     <body>
23         <div>Hello,大熊!</div>
24     </body>
25 </html>
  (2),建立”index.js“



alert("Hello bb !") ; // 为了测试就这么一句代码
  (3),建立”server.js“



1 var http = require("http");
2 var fs = require('fs');
3 var url = require('url');
4 var path = require("path") ;
5 http.createServer(function(request,response) {
6     var method = request.method ;
7     method = method.toLowerCase() ;
8     var fileName = path.basename(request.url) ;
9     var extName = path.extname(fileName) ;
10     var root = "./" ;
11     if("get" == method){
12         if(extName){
13             fs.readFile("./" + fileName,"utf-8",function (error,data){
14                 if(error)throw error ;
15                 response.writeHead(200,{
16                     "Content-Type": {
17                          ".css": "text/css" ,
18                          ".js" : "application/javascript"
19                   }[extName]
20                 }) ;
21                 response.write(data) ;
22                 response.end() ;
23             });
24         }
25         else{
26             fs.readFile(root + "index.html","utf-8",function (error,data){
27                 if(error)throw error ;
28                 response.writeHead(200,{
29                     "Content-Type" : "text/html"
30                 });
31                 response.write(data) ;
32                 response.end() ;
33             });
34         }
35     }
36     else if("post" == request.url){
37         // handle post here
38     }
39 }).listen(8888) ;
40 console.log("Web Server Running , Port On ---> 8888") ;
  node server.js 运行一下。
  三,总结一下
  (1),理解上述三个模块之间的联系,灵活使用 。
  
  (2),熟练使用 "Url,QueryString,Path" 三个模块相关的api。
  
  (3),最后强调:理解上面例子中的代码意图,不断重构,不断总结。
  哈哈哈,本篇结束,未完待续,希望和大家多多交流够沟通,共同进步。。。。。。呼呼呼……(*^__^*)        

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-345727-1-1.html 上篇帖子: [原创]使用 NodeJS, MarkdownJS, PrettifyJS 打造个人博客写作平台 下篇帖子: Nodejs学习笔记(十四)— Mongoose介绍和入门
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表