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 后缀名判断限制代码
Mar 31 NodeJs
解析NodeJs的调试方法
Dec 11 NodeJs
详解nodejs中exports和module.exports的区别
Feb 17 NodeJs
nodejs 终端打印进度条实例代码
Apr 22 NodeJs
nodejs mysql 实现分页的方法
Jun 06 NodeJs
nodejs中安装ghost出错的原因及解决方法
Oct 23 NodeJs
使用nodejs+express实现简单的文件上传功能
Dec 27 NodeJs
NodeJs搭建本地服务器之使用手机访问的实例讲解
May 12 NodeJs
修改Nodejs内置的npm默认配置路径方法
May 13 NodeJs
nodejs和react实现即时通讯简易聊天室功能
Aug 21 NodeJs
Nodejs libuv运行原理详解
Aug 21 NodeJs
Node.js实现爬取网站图片的示例代码
Apr 04 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
《星际争霸2》终章已出 RTS时代宣告终结
2017/02/07 星际争霸
由php的call_user_func传reference引发的思考
2010/07/23 PHP
解析用PHP读写音频文件信息的详解(支持WMA和MP3)
2013/05/10 PHP
php 强制下载文件实现代码
2013/10/28 PHP
php中heredoc与nowdoc介绍
2014/12/25 PHP
javascript JSON操作入门实例
2010/04/16 Javascript
基于jQuery的仿flash的广告轮播代码
2010/11/04 Javascript
javascript学习笔记(三)显示当时时间的代码
2011/04/08 Javascript
jquery 提交值不为空的元素示例代码
2013/05/10 Javascript
JS实现随机化快速排序的实例代码
2013/08/01 Javascript
浅析jquery的js图表组件highcharts
2014/03/06 Javascript
浅谈Web页面向后台提交数据的方式和选择
2016/09/23 Javascript
angular ngClick阻止冒泡使用默认行为的方法
2016/11/03 Javascript
bootstrap基本配置_动力节点Java学院整理
2017/07/14 Javascript
Vue.js devtool插件安装后无法使用的解决办法
2017/11/27 Javascript
JavaScript实现创建自定义对象的常用方式总结
2018/07/09 Javascript
vue异步axios获取的数据渲染到页面的方法
2018/08/09 Javascript
JS数组实现分类统计实例代码
2018/09/30 Javascript
深入剖析JavaScript instanceof 运算符
2019/06/14 Javascript
世界上最短的数字判断js代码
2019/09/09 Javascript
Python xlrd读取excel日期类型的2种方法
2015/04/28 Python
Python测试模块doctest使用解析
2019/08/10 Python
详解Python中的format格式化函数的使用方法
2019/11/20 Python
Django 限制访问频率的思路详解
2019/12/24 Python
Python读取YAML文件过程详解
2019/12/30 Python
python实现学生成绩测评系统
2020/06/22 Python
HTML5页面无缝闪开的问题及解决方案
2020/06/11 HTML / CSS
init进程的作用
2015/08/20 面试题
法学毕业生自我鉴定
2013/11/08 职场文书
医药营销个人求职信
2014/04/12 职场文书
厨师个人自我鉴定范文
2014/04/19 职场文书
人才市场接收函
2015/01/30 职场文书
2016年教师反腐倡廉心得体会
2016/01/13 职场文书
如何在Mac上通过docker配置PHP开发环境
2021/05/29 PHP
MySQL RC事务隔离的实现
2022/03/31 MySQL
MySQL池化框架学习接池自定义
2022/07/23 MySQL