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实现PHP的print_r函数代码
Mar 14 NodeJs
使用forever管理nodejs应用教程
Jun 03 NodeJs
nodejs npm package.json中文文档
Sep 04 NodeJs
nodejs事件的监听与触发的理解分析
Feb 12 NodeJs
nodejs基础应用
Feb 03 NodeJs
NodeJs测试框架Mocha的安装与使用
Mar 28 NodeJs
nodejs批量下载图片的实现方法
May 19 NodeJs
NodeJS实现视频转码的示例代码
Nov 18 NodeJs
nodejs实现爬取网站图片功能
Dec 14 NodeJs
nodejs实现一个word文档解析器思路详解
Aug 14 NodeJs
nodejs对项目下所有空文件夹创建gitkeep的方法
Aug 02 NodeJs
nodejs中的异步编程知识点详解
Jan 17 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
建立动态的WML站点(三)
2006/10/09 PHP
php mysql索引问题
2008/06/07 PHP
PHP实现事件机制的方法
2015/07/10 PHP
php用户注册信息验证正则表达式
2015/11/12 PHP
PHP序列化/对象注入漏洞分析
2016/04/18 PHP
php实现转换html格式为文本格式的方法
2016/05/16 PHP
javascript setTimeout和setInterval 的区别
2009/12/08 Javascript
JavaScript 数组循环引起的思考
2010/01/01 Javascript
jquery 插件学习(五)
2012/08/06 Javascript
JavaScript将相对地址转换为绝对地址示例代码
2013/07/19 Javascript
jquery中选择块并改变属性值的方法
2013/07/31 Javascript
jQuery圆形统计图开发实例
2015/01/04 Javascript
jQuery bt气泡实现悬停显示及移开隐藏功能的方法
2016/07/12 Javascript
AngularJS在IE下取数据总是缓存问题的解决方法
2016/08/05 Javascript
JavaScript 字符串常用操作小结(非常实用)
2016/11/30 Javascript
快速了解vue-cli 3.0 新特性
2018/02/28 Javascript
解决vue项目使用font-awesome,build后路径的问题
2018/09/01 Javascript
js设置默认时间跨度过程详解
2019/07/17 Javascript
[01:23]一分钟告诉你 DOTA2为什么叫信仰2
2014/06/20 DOTA
[01:05:56]Liquid vs VP Supermajor决赛 BO 第二场 6.10
2018/07/04 DOTA
python处理图片之PIL模块简单使用方法
2015/05/11 Python
python文件特定行插入和替换实例详解
2017/07/12 Python
python之信息加密题目详解
2019/06/26 Python
使用Python实现 学生学籍管理系统
2019/11/26 Python
tensorflow自定义激活函数实例
2020/02/04 Python
Python 利用argparse模块实现脚本命令行参数解析
2020/12/28 Python
CSS3控制HTML元素动画效果
2014/02/08 HTML / CSS
质检部部长职责
2013/12/16 职场文书
部队党性分析材料
2014/02/16 职场文书
保险经纪人求职信
2014/03/11 职场文书
出国英文推荐信
2014/05/10 职场文书
微笑服务演讲稿
2014/05/13 职场文书
选秀节目策划方案
2014/06/06 职场文书
暑期工社会实践报告
2015/07/13 职场文书
2019最新婚庆对联集锦!
2019/07/10 职场文书
纪念建国70周年演讲稿
2019/07/19 职场文书