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批量修改文件编码格式
Jan 22 NodeJs
nodejs初步体验篇
Nov 23 NodeJs
nodejs实现bigpipe异步加载页面方案
Jan 26 NodeJs
用NodeJS实现批量查询地理位置的经纬度接口
Aug 16 NodeJs
NodeJs读取JSON文件格式化时的注意事项
Sep 25 NodeJs
nodeJS删除文件方法示例
Dec 25 NodeJs
进阶之初探nodeJS
Jan 24 NodeJs
NodeJs模拟登陆正方教务
Apr 28 NodeJs
详解nodeJS之路径PATH模块
May 31 NodeJs
nodejs搭建本地服务器轻松解决跨域问题
Mar 21 NodeJs
nodejs 如何手动实现服务器
Aug 20 NodeJs
Nodejs 微信小程序消息推送的实现
Jan 20 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的面试题集
2006/11/19 PHP
TP5框架实现上传多张图片的方法分析
2020/03/29 PHP
javascript中IE浏览器不支持NEW DATE()带参数的解决方法
2012/03/01 Javascript
仿当当网淘宝网等主流电子商务网站商品分类导航菜单
2013/09/25 Javascript
利用jquery.qrcode在页面上生成二维码且支持中文
2014/02/12 Javascript
jQuery如何防止这种冒泡事件发生
2015/02/27 Javascript
JS表单数据验证的正则表达式(常用)
2017/02/18 Javascript
详解Angular.js指令中scope类型的几种特殊情况
2017/02/21 Javascript
详解微信第三方小程序代开发
2017/06/23 Javascript
详解nodejs中express搭建权限管理系统
2017/09/15 NodeJs
vue实现验证码按钮倒计时功能
2018/04/10 Javascript
JS中call和apply函数用法实例分析
2018/06/20 Javascript
layui的面包屑或者表单不显示的解决方法
2019/09/05 Javascript
JavaScript或jQuery 获取option value值方法解析
2020/05/12 jQuery
vue实现一个6个输入框的验证码输入组件功能的实例代码
2020/06/29 Javascript
layui使用及简单的三级联动实现教程
2020/12/01 Javascript
Python中List.count()方法的使用教程
2015/05/20 Python
Python六大开源框架对比
2015/10/19 Python
Python Pywavelet 小波阈值实例
2019/01/09 Python
python write无法写入文件的解决方法
2019/01/23 Python
python控制nao机器人身体动作实例详解
2019/04/29 Python
在python里使用await关键字来等另外一个协程的实例
2020/05/04 Python
python的数学算法函数及公式用法
2020/11/18 Python
python opencv图像处理(素描、怀旧、光照、流年、滤镜 原理及实现)
2020/12/10 Python
Javascript 高级手势使用介绍
2013/04/21 HTML / CSS
html5中嵌入视频自动播放的问题解决
2020/05/25 HTML / CSS
波兰家具和室内装饰品购物网站:Vivre
2018/04/10 全球购物
2013年保送生自荐信格式
2013/11/20 职场文书
父亲八十大寿答谢词
2014/01/23 职场文书
就业推荐表导师评语
2014/12/31 职场文书
酒店辞职信怎么写
2015/02/27 职场文书
2015年信息宣传工作总结
2015/05/26 职场文书
2016年习总书记讲话学习心得体会
2016/01/20 职场文书
2019年思想汇报
2019/06/20 职场文书
python文件与路径操作神器 pathlib
2022/04/01 Python