NodeJS学习笔记之(Url,QueryString,Path)模块


Posted in NodeJs onJanuary 13, 2015

一,开篇分析

这篇文章把这三个模块拿来一起说,原因是它们各自的篇幅都不是很长,其次是它们之间存在着依赖关系,所以依次介绍并且实例分析。废话不多说了,请看下面文档:

(1),"Url模块"

NodeJS学习笔记之(Url,QueryString,Path)模块

来个小栗子:

 var url = require('url');

 var queryUrl = "http://localhost:8888/bb?name=bigbear&memo=helloworld" ;

 console.log(typeof url.parse(queryUrl)) ;

 console.log(url.parse(queryUrl)) ;

运行结果: 

 object // typeof 

 

 { 

     protocol: 'http:',

     slashes: true,

     auth: null,

     host: 'localhost:8888',

     port: '8888',

     hostname: 'localhost',

     hash: null,

     search: '?name=bigbear&memo=helloworld',

     query: 'name=bigbear&memo=helloworld',

     pathname: '/bb',

     path: '/bb?name=bigbear&memo=helloworld',

     href: 'http://localhost:8888/bb?name=bigbear&memo=helloworld'

 }

 加以说明如下:

protocol: 请求协议

host: URL主机名已全部转换成小写, 包括端口信息

auth:URL中身份验证信息部分

hostname:主机的主机名部分, 已转换成小写

port: 主机的端口号部分

pathname: URL的路径部分,位于主机名之后请求查询之前

search: URL 的“查询字符串”部分,包括开头的问号。

path: pathname 和 search 连在一起。

query: 查询字符串中的参数部分(问号后面部分字符串),或者使用 querystring.parse() 解析后返回的对象。

hash: URL 的 “#” 后面部分(包括 # 符号)

 补充api:"url.format(urlObj)"

NodeJS学习笔记之(Url,QueryString,Path)模块

作用:输入一个 URL 对象,返回格式化后的 URL 字符串。

(2),"QueryString模块"

NodeJS学习笔记之(Url,QueryString,Path)模块

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

 var url = require('url');

 var qs = require('querystring');

 var queryUrl = "http://localhost:8888/bb?name=bigbear&memo=helloworld" ;

 queryUrl = url.parse(queryUrl).query ;

 console.log(queryUrl) ;

 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模块"

NodeJS学习笔记之(Url,QueryString,Path)模块

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

先来一个简单的栗子:

 var url = require('url');

 var qs = require('querystring');

 var path = require("path") ;

 var queryUrl = "http://localhost:8888/bb?name=bigbear&memo=helloworld" ;

 var root = path.basename(queryUrl) ;

 console.log(root) ; // bb?name=bigbear&memo=helloworld

返回路径中的最后一部分,以”/“分割。

 var url = require('url');

 var qs = require('querystring');

 var path = require("path") ;

 var queryUrl = "http://localhost:8888/bb?name=bigbear&memo=helloworld" ;

 var root = path.basename(queryUrl) ;

 console.log(root) ; // bb?name=bigbear&memo=helloworld

 var ext = path.extname(root) ;

 console.log(ext || "Not Ext Name !") ; // Not Ext Name !

由于api过多,以上只列出来了常用的几个,大家需认真阅读文档。

二,综合栗子

场景描述------服务器接到不同情况的请求,通过 “Url” 分别做不同处理,代码如下:

(1),建立”index.html“

 <!doctype html>

 <html>

     <head>

         <title>Bigbear</title>

         <meta content="IE=8" http-equiv="X-UA-Compatible"/>

         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

         <style type="text/css">

             div {

                 margin-top: 50px;

                 width: 100%; 

                   margin: 0px;

                 height:120px;

                 line-height:120px;

                   color:#fff;

                   font-size:22px;

                   background:#ff9900;

                 text-align: center;

             }

         </style>

         <script src="index.js"></script>

     </head>

     <body>

         <div>Hello,大熊!</div>

     </body>

 </html>

(2),建立”index.js“

alert("Hello bb !") ; // 为了测试就这么一句代码

(3),建立”server.js“

var http = require("http");

var fs = require('fs');

var url = require('url');

var path = require("path") ;

http.createServer(function(request,response) {

    var method = request.method ;

    method = method.toLowerCase() ;

    var fileName = path.basename(request.url) ;

    var extName = path.extname(fileName) ;

    var root = "./" ;

    if("get" == method){

        if(extName){

            fs.readFile("./" + fileName,"utf-8",function (error,data){

                if(error)throw error ;

                response.writeHead(200,{

                    "Content-Type": {

                         ".css": "text/css" ,

                         ".js" : "application/javascript"

                  }[extName]

                }) ;

                response.write(data) ;

                response.end() ;

            });

        }

        else{

            fs.readFile(root + "index.html","utf-8",function (error,data){

                if(error)throw error ;

                response.writeHead(200,{

                    "Content-Type" : "text/html"

                });

                response.write(data) ;

                response.end() ;

            });

        }

    }

    else if("post" == request.url){

        // handle post here

    }

}).listen(8888) ;

console.log("Web Server Running , Port On ---> 8888") ;

 

node server.js 运行一下。

三,总结一下

(1),理解上述三个模块之间的联系,灵活使用 。
(2),熟练使用 "Url,QueryString,Path" 三个模块相关的api。
(3),最后强调:理解上面例子中的代码意图,不断重构,不断总结。

NodeJs 相关文章推荐
NodeJS学习笔记之Connect中间件模块(一)
Jan 27 NodeJs
Nodejs实现批量下载妹纸图
May 28 NodeJs
详解NodeJS框架express的路径映射(路由)功能及控制
Mar 24 NodeJs
nodejs服务搭建教程 nodejs访问本地站点文件
Apr 07 NodeJs
手把手教你把nodejs部署到linux上跑出hello world
Jun 19 NodeJs
nodejs中art-template模板语法的引入及冲突解决方案
Nov 07 NodeJs
nodejs实现大文件(在线视频)的读取
Oct 16 NodeJs
nodeJS模块简单用法示例
Apr 21 NodeJs
详解webpack打包nodejs项目(前端代码)
Sep 19 NodeJs
NodeJS模块与ES6模块系统语法及注意点详解
Jan 04 NodeJs
PHPStorm中如何对nodejs项目进行单元测试详解
Feb 28 NodeJs
NodeJS开发人员常见五个错误理解
Oct 14 NodeJs
NodeJS学习笔记之FS文件模块
Jan 13 #NodeJs
NodeJS学习笔记之Http模块
Jan 13 #NodeJs
Nodejs学习笔记之Stream模块
Jan 13 #NodeJs
Nodejs学习笔记之NET模块
Jan 13 #NodeJs
Nodejs学习笔记之Global Objects全局对象
Jan 13 #NodeJs
Nodejs为什么选择javascript为载体语言
Jan 13 #NodeJs
NodeJS中Buffer模块详解
Jan 07 #NodeJs
You might like
VML绘图板②脚本--VMLgraph.js、XMLtool.js
2006/10/09 PHP
PHP 小心urldecode引发的SQL注入漏洞
2011/10/27 PHP
php递归获取目录内文件(包含子目录)封装类分享
2013/12/25 PHP
PHP开源开发框架ZendFramework使用中常见问题说明及解决方案
2014/06/12 PHP
php计算2个日期的差值函数分享
2015/02/02 PHP
PHP中strncmp()函数比较两个字符串前2个字符是否相等的方法
2016/01/07 PHP
使用ThinkPHP的自动完成实现无限级分类实例详解
2016/09/02 PHP
nodejs 后缀名判断限制代码
2011/03/31 NodeJs
jquery写个checkbox——类似邮箱全选功能
2013/03/19 Javascript
js 自动播放的实例代码
2013/11/19 Javascript
基于jQuery的图片不完全按比例自动缩小
2014/07/11 Javascript
javascript Deferred和递归次数限制实例
2014/10/21 Javascript
JavaScript实现找质数代码分享
2015/03/24 Javascript
使用AOP改善javascript代码
2015/05/01 Javascript
使用微信内置浏览器点击下拉框出现页面乱跳转现象(iphone),该怎么办
2016/01/04 Javascript
多种jQuery绑定事件的实现方式
2016/06/13 Javascript
js实现交通灯效果
2017/01/13 Javascript
bootstrap中的 form表单属性role=&quot;form&quot;的作用详解
2017/01/20 Javascript
Vue中fragment.js使用方法详解
2017/03/09 Javascript
JS分页的实现(同步与异步)
2017/09/16 Javascript
jQuery实现的滑块滑动导航效果示例
2018/06/04 jQuery
在react中使用vuex的示例代码
2018/07/30 Javascript
Vue父子组件之间的通信实例详解
2018/09/28 Javascript
在Node.js下运用MQTT协议实现即时通讯及离线推送的方法
2019/01/24 Javascript
Vue2.0+Vux搭建一个完整的移动webApp项目的示例
2019/03/19 Javascript
使用preload预加载页面资源时注意事项
2020/02/03 Javascript
Vue+Element自定义纵向表格表头教程
2020/10/26 Javascript
[01:25:33]完美世界DOTA2联赛PWL S3 INK ICE vs Magma 第二场 12.20
2020/12/23 DOTA
Python网络爬虫中的同步与异步示例详解
2018/02/03 Python
使用Python的OpenCV模块识别滑动验证码的缺口(推荐)
2019/05/10 Python
一款纯css3实现的竖形二级导航的实例教程
2014/12/11 HTML / CSS
美国知名的在线旅游服务网站:Priceline
2016/07/23 全球购物
学校党的群众路线教育实践活动对照检查材料
2014/09/24 职场文书
党小组鉴定意见
2015/06/02 职场文书
治理商业贿赂工作总结
2015/08/10 职场文书
个人道歉信大全
2019/04/11 职场文书