大熊君大话NodeJS之------(Url,QueryString,Path)模块

一,开篇分析

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

(1),"Url模块"

  来个小栗子:  

1 var url = require(‘url‘);
2 var queryUrl = "http://localhost:8888/bb?name=bigbear&memo=helloworld" ;
3 console.log(typeof url.parse(queryUrl)) ;
4 console.log(url.parse(queryUrl)) ;

  运行结果: 

 1 object // typeof
 2
 3 {
 4     protocol: ‘http:‘,
 5     slashes: true,
 6     auth: null,
 7     host: ‘localhost:8888‘,
 8     port: ‘8888‘,
 9     hostname: ‘localhost‘,
10     hash: null,
11     search: ‘?name=bigbear&memo=helloworld‘,
12     query: ‘name=bigbear&memo=helloworld‘,
13     pathname: ‘/bb‘,
14     path: ‘/bb?name=bigbear&memo=helloworld‘,
15     href: ‘http://localhost:8888/bb?name=bigbear&memo=helloworld‘
16 }

 加以说明如下:  

  protocol: 请求协议

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

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

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

  port: 主机的端口号部分

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

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

  path: pathname 和 search 连在一起。

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

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

  

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

  

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

(2),"QueryString模块"

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

    

1 var url = require(‘url‘);
2 var qs = require(‘querystring‘);
3 var queryUrl = "http://localhost:8888/bb?name=bigbear&memo=helloworld" ;
4 queryUrl = url.parse(queryUrl).query ;
5 console.log(queryUrl) ;
6 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模块"

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

  先来一个简单的栗子:    

1 var url = require(‘url‘);
2 var qs = require(‘querystring‘);
3 var path = require("path") ;
4 var queryUrl = "http://localhost:8888/bb?name=bigbear&memo=helloworld" ;
5 var root = path.basename(queryUrl) ;
6 console.log(root) ; // bb?name=bigbear&memo=helloworld

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

1 var url = require(‘url‘);
2 var qs = require(‘querystring‘);
3 var path = require("path") ;
4 var queryUrl = "http://localhost:8888/bb?name=bigbear&memo=helloworld" ;
5 var root = path.basename(queryUrl) ;
6 console.log(root) ; // bb?name=bigbear&memo=helloworld
7 var ext = path.extname(root) ;
8 console.log(ext || "Not Ext Name !") ; // Not Ext Name !

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

二,综合栗子

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

  (1),建立”index.html“  

 1 <!doctype html>
 2 <html>
 3     <head>
 4         <title>Bigbear</title>
 5         <meta content="IE=8" http-equiv="X-UA-Compatible"/>
 6         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7         <style type="text/css">
 8             div {
 9                 margin-top: 50px;
10                 width: 100%;
11                   margin: 0px;
12                 height:120px;
13                 line-height:120px;
14                   color:#fff;
15                   font-size:22px;
16                   background:#ff9900;
17                 text-align: center;
18             }
19         </style>
20         <script src="index.js"></script>
21     </head>
22     <body>
23         <div>Hello,大熊!</div>
24     </body>
25 </html>

  (2),建立”index.js“

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

  (3),建立”server.js“

 1 var http = require("http");
 2 var fs = require(‘fs‘);
 3 var url = require(‘url‘);
 4 var path = require("path") ;
 5 http.createServer(function(request,response) {
 6     var method = request.method ;
 7     method = method.toLowerCase() ;
 8     var fileName = path.basename(request.url) ;
 9     var extName = path.extname(fileName) ;
10     var root = "./" ;
11     if("get" == method){
12         if(extName){
13             fs.readFile("./" + fileName,"utf-8",function (error,data){
14                 if(error)throw error ;
15                 response.writeHead(200,{
16                     "Content-Type": {
17                          ".css": "text/css" ,
18                          ".js" : "application/javascript"
19                   }[extName]
20                 }) ;
21                 response.write(data) ;
22                 response.end() ;
23             });
24         }
25         else{
26             fs.readFile(root + "index.html","utf-8",function (error,data){
27                 if(error)throw error ;
28                 response.writeHead(200,{
29                     "Content-Type" : "text/html"
30                 });
31                 response.write(data) ;
32                 response.end() ;
33             });
34         }
35     }
36     else if("post" == request.url){
37         // handle post here
38     }
39 }).listen(8888) ;
40 console.log("Web Server Running , Port On ---> 8888") ;

  node server.js 运行一下。

三,总结一下

(1),理解上述三个模块之间的联系,灵活使用 。

(2),熟练使用 "Url,QueryString,Path" 三个模块相关的api。

(3),最后强调:理解上面例子中的代码意图,不断重构,不断总结。

            哈哈哈,本篇结束,未完待续,希望和大家多多交流够沟通,共同进步。。。。。。呼呼呼……(*^__^*)             

时间: 2024-10-04 23:31:55

大熊君大话NodeJS之------(Url,QueryString,Path)模块的相关文章

大熊君大话NodeJS之------Net模块

一,开篇分析 从今天开始,我们来深入具体的模块学习,这篇文章是这个系列(大熊君大话NodeJS)文章的第三篇,前两篇主要是以理论为主,相信大家在前两篇的学习中, 对NodeJS也有一个基本的认识,没事!!!趁热打铁,让我们继续将NodeJS进行到底,好了废话不多说,直接进入今天的主题 “Net模块” ,那么”Net“应该如何理解那? 它是做什么用的那?(Net模块可用于创建Socket服务器或Socket客户端. NodeJS 的数据通信,最基础的两个模块是 Net 和 Http,前者是基于 T

大熊君大话NodeJS之------Http模块

一,开篇分析 首先“Http”这个概念大家应该比较熟悉了,它不是基于特定语言的,是一个通用的应用层协议,不同语言有不同的实现细节,但是万变不离其宗,思想是相同的, NodeJS作为一个宿主运行环境,以JavaScript为宿主语言,它也有自己实现的一套标准,这篇文章我们就一起来学习一下 “Http模块” .但是作为前提来说, 希望大家可以先阅读一下官网提供的api,有一个前置了解,这样就方便多了,以下是Http部分的api概览: HTTP http.STATUS_CODES http.creat

大熊君大话NodeJS之------基于Connect中间件的小应用(Bigbear记事本应用之第一篇)

一,开篇分析 大家好哦,大熊君又来了,昨天因为有点个人的事没有写博客,今天又出来了一篇,这篇主要是写一个记事本的小应用,前面的文章, 我也介绍过“Connect”中间件的使用以及“Mongodb”的用法,今天就结合这两个中间件,写个实际的例子,不断完善和重构,已达到 充分学习的目的.好了,废话不说了,直接进入主题. 二,需求分析 (1),用户注册,登录功能(没有涉及很复杂的交互场景,注册时会有用户判断是否已存在). (2),用户登录成功,进入笔记管理系统的后台(笔记模块的增删改查功能). (3)

大熊君大话NodeJS之开篇------Why NodeJS(将Javascript进行到底)

一,开篇分析 大家好啊,大熊君又来啦(*^__^*) 嘻嘻……,之前我写过一系列关于JS(OOP与设计模式)方面的文章,反响还好,其实这也是对我本人最大的鼓励,于是我决定我要将JavaScript进行到底 准备写一个NodeJS方面的系列文章,由浅入深,循序渐进,秉承的理念是重思想,多实践,勤能补拙,贵在坚持. 我们先来看看NodeJS官网上的介绍: 其特点为: 1,它是一个Javascript运行环境 2,依赖于Chrome V8引擎进行代码解释 3,事件驱动 4, 非阻塞I/O 5, 轻量.

大熊君大话NodeJS之------FS文件模块

一,开篇分析 文件系统模块是一个简单包装的标准 POSIX 文件 I/O 操作方法集.可以通过调用 require("fs") 来获取该模块.文件系统模块中的所有方法均有异步和同步版本. (1),文件系统模块中的异步方法需要一个完成时的回调函数作为最后一个传入形参. (2),回调函数的构成由调用的异步方法所决定,通常情况下回调函数的第一个形参为返回的错误信息. (3),如果异步操作执行正确并返回,该错误形参则为null或者undefined.如果使用的是同步版本的操作方法,一旦出现错误

大熊君大话NodeJS之------Stream模块

一,开篇分析 流是一个抽象接口,被 Node 中的很多对象所实现.比如对一个 HTTP 服务器的请求是一个流,stdout 也是一个流.流是可读,可写或兼具两者的. 最早接触Stream是从早期的unix开始的, 数十年的实践证明Stream 思想可以很简单的开发出一些庞大的系统. 在unix里,Stream是通过 "|" 实现的.在node中,作为内置的stream模块,很多核心模块和三方模块都使用到. 和unix一样,node stream主要的操作也是.pipe(),使用者可以使

大熊君大话NodeJS之------Global Objects全局对象

一,开篇分析 在上个章节中我们学习了NodeJS的基础理论知识,对于这些理论知识来说理解是至关重要的,在后续的章节中,我们会对照着官方文档逐步学习里面的各部分模块,好了该是本文主角登台亮相的时候了,Global  让我们来看一下官方的定义: Global Objects全局对象 These objects are available in all modules. Some of these objects aren't actually in the global scope but in t

大熊君大话NodeJS之------MongoDB模块(额外篇)

一,开篇分析 这篇属于扩展知识篇,因为在下面的文章中会用到数据库操作,所以今天就来说说它(Mongodb模块). (1),简介 MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种. MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.他支持的数据结构非常松散,是类似json的bj

大熊君大话NodeJS之------Buffer模块

一,开篇分析 所谓缓冲区Buffer,就是 "临时存贮区" 的意思,是暂时存放输入输出数据的一段内存. JS语言自身只有字符串数据类型,没有二进制数据类型,因此NodeJS提供了一个与String对等的全局构造函数Buffer来提供对二进制数据的操作.除了可以读取文件得到Buffer的实例外,还能够直接构造,例如: var buffer = new Buffer([ 0x68, 0x65, 0x6c, 0x6c, 0x6f ]) ; Buffer与字符串类似,除了可以用.length属