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中自定义事件实例
Jun 20 NodeJs
nodejs实现获取当前url地址及url各种参数值
Jun 25 NodeJs
学习 NodeJS 第八天:Socket 通讯实例
Dec 21 NodeJs
nodejs和C语言插入mysql数据库乱码问题的解决方法
Apr 14 NodeJs
nodejs入门教程五:连接数据库的方法分析
Apr 24 NodeJs
详解nodejs微信jssdk后端接口
May 25 NodeJs
nodejs构建本地web测试服务器 如何解决访问静态资源问题
Jul 14 NodeJs
利用nodeJs anywhere搭建本地服务器环境的方法
May 12 NodeJs
PHPStorm中如何对nodejs项目进行单元测试详解
Feb 28 NodeJs
nodejs一个简单的文件服务器的创建方法
Sep 13 NodeJs
NodeJS实现一个聊天室功能
Nov 25 NodeJs
分享五个Node.js开发的优秀实践 
Apr 07 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
日本因肺炎疫情影响,这几部动漫推延播放!
2020/03/03 日漫
PHP之变量、常量学习笔记
2008/03/27 PHP
php IP转换整形(ip2long)的详解
2013/06/06 PHP
PHP实现动态web服务器方法
2015/07/29 PHP
PHP常用的小程序代码段
2015/11/14 PHP
强悍无比的WEB开发好助手FireBug(Firefox Plugin)
2007/01/16 Javascript
JS 自定义函数缺省值的设置方法
2010/05/05 Javascript
jquery弹窗插件colorbox绑定动态生成元素的方法
2014/06/20 Javascript
JavaScript 学习笔记之操作符(续)
2015/01/14 Javascript
如何选择jQuery版本 1.x? 2.x? 3.x?
2017/04/01 jQuery
javascript简单链式调用案例分析
2017/05/10 Javascript
jQuery实现IE输入框完成placeholder标签功能的方法
2017/09/20 jQuery
vue项目开发中setTimeout等定时器的管理问题
2018/09/13 Javascript
详解用Webpack与Babel配置ES6开发环境
2019/03/12 Javascript
Vue数据绑定简析小结
2019/05/07 Javascript
jquery实现自定义树形表格的方法【自定义树形结构table】
2019/07/12 jQuery
ES6 Iterator接口和for...of循环用法分析
2019/07/31 Javascript
JS中的算法与数据结构之列表(List)实例详解
2019/08/16 Javascript
Vue开发中遇到的跨域问题及解决方法
2020/02/11 Javascript
Vue按时间段查询数据组件使用详解
2020/08/21 Javascript
[00:23]魔方之谜解锁款式
2018/12/20 DOTA
Python max内置函数详细介绍
2016/11/17 Python
python实现杨氏矩阵查找
2019/03/02 Python
Python解压 rar、zip、tar文件的方法
2019/11/19 Python
Python 爬虫的原理
2020/07/30 Python
html5 利用重力感应实现摇一摇换颜色可用来做抽奖等等
2014/05/07 HTML / CSS
世界上最好的威士忌和烈性酒购买网站:The Whisky Exchange
2016/11/20 全球购物
英国礼品和生活方式品牌:Treat Republic
2020/11/21 全球购物
个人授权委托书样本
2014/09/13 职场文书
工作会议简报
2015/07/20 职场文书
2016领导干部廉洁从政心得体会
2016/01/19 职场文书
2016年基层党组织公开承诺书
2016/03/25 职场文书
公司开业的祝贺语大全(60条)
2019/07/05 职场文书
Html5生成验证码的示例代码
2021/05/10 Javascript
详解Java实现数据结构之并查集
2021/06/23 Java/Android
vue中data里面的数据相互使用方式
2022/06/05 Vue.js