NodeJS學(xué)習(xí)筆記之(Url,QueryString,Path)模塊
一,開(kāi)篇分析
這篇文章把這三個(gè)模塊拿來(lái)一起說(shuō),原因是它們各自的篇幅都不是很長(zhǎng),其次是它們之間存在著依賴(lài)關(guān)系,所以依次介紹并且實(shí)例分析。廢話不多說(shuō)了,請(qǐng)看下面文檔:
(1),"Url模塊"
來(lái)個(gè)小栗子:
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)) ;
運(yùn)行結(jié)果:
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'
}
加以說(shuō)明如下:
protocol: 請(qǐng)求協(xié)議
host: URL主機(jī)名已全部轉(zhuǎn)換成小寫(xiě), 包括端口信息
auth:URL中身份驗(yàn)證信息部分
hostname:主機(jī)的主機(jī)名部分, 已轉(zhuǎn)換成小寫(xiě)
port: 主機(jī)的端口號(hào)部分
pathname: URL的路徑部分,位于主機(jī)名之后請(qǐng)求查詢(xún)之前
search: URL 的“查詢(xún)字符串”部分,包括開(kāi)頭的問(wèn)號(hào)。
path: pathname 和 search 連在一起。
query: 查詢(xún)字符串中的參數(shù)部分(問(wèn)號(hào)后面部分字符串),或者使用 querystring.parse() 解析后返回的對(duì)象。
hash: URL 的 “#” 后面部分(包括 # 符號(hào))
補(bǔ)充api:"url.format(urlObj)"
作用:輸入一個(gè) URL 對(duì)象,返回格式化后的 URL 字符串。
(2),"QueryString模塊"
"QueryString" 模塊用于實(shí)現(xiàn)URL參數(shù)字符串與參數(shù)對(duì)象的互相轉(zhuǎn)換,來(lái)個(gè)栗子,如下所示:
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)) ;
運(yùn)行結(jié)果·如下:
name=bigbear&memo=helloworld
{
name: 'bigbear',
memo: 'helloworld'
}
補(bǔ)充api:
querystring.stringify(obj, [sep], [eq])------序列化一個(gè)對(duì)象到一個(gè) query string。
可以選擇是否覆蓋默認(rèn)的分割符('&')和分配符('=')?! ?/p>
querystring.stringify({foo: 'bar', baz: 'qux'}, ';', ':')// 返回如下字串'foo:bar;baz:qux'
querystring.parse(str, [sep], [eq], [options])------將一個(gè) query string 反序列化為一個(gè)對(duì)象??梢赃x擇是否覆蓋默認(rèn)的分割符('&')和分配符('=')。
options對(duì)象可能包含maxKeys屬性(默認(rèn)為1000),它可以用來(lái)限制處理過(guò)的鍵(key)的數(shù)量.設(shè)為0可以去除鍵(key)的數(shù)量限制.
示例:querystring.parse('foo=bar&baz=qux&baz=quux&corge') // { foo: 'bar', baz: ['qux', 'quux'], corge: '' }
(3),"Path模塊"
本模塊包含一套用于處理和轉(zhuǎn)換文件路徑的工具集。幾乎所有的方法僅對(duì)字符串進(jìn)行轉(zhuǎn)換, 文件系統(tǒng)是不會(huì)檢查路徑是否真實(shí)有效的。
先來(lái)一個(gè)簡(jiǎn)單的栗子:
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過(guò)多,以上只列出來(lái)了常用的幾個(gè),大家需認(rèn)真閱讀文檔。
二,綜合栗子
場(chǎng)景描述------服務(wù)器接到不同情況的請(qǐng)求,通過(guò) “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>
?。?),建立”index.js“
alert("Hello bb !") ; // 為了測(cè)試就這么一句代碼
?。?),建立”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 運(yùn)行一下。
三,總結(jié)一下
(1),理解上述三個(gè)模塊之間的聯(lián)系,靈活使用 。
(2),熟練使用 "Url,QueryString,Path" 三個(gè)模塊相關(guān)的api。
(3),最后強(qiáng)調(diào):理解上面例子中的代碼意圖,不斷重構(gòu),不斷總結(jié)。
相關(guān)文章
使用nodeAPI時(shí)遇到過(guò)異步問(wèn)題解決
這篇文章主要為大家介紹了使用nodeAPI時(shí)遇到過(guò)異步問(wèn)題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01node.js中的fs.chmodSync方法使用說(shuō)明
這篇文章主要介紹了node.js中的fs.chmodSync方法使用說(shuō)明,本文介紹了fs.chmodSync方法說(shuō)明、語(yǔ)法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下2014-12-12基于nodejs+express(4.x+)實(shí)現(xiàn)文件上傳功能
通過(guò)一段時(shí)間的查閱資料發(fā)現(xiàn)實(shí)現(xiàn)上傳的方式有:1.express中間件multer模塊2.connect-multiparty模塊(但現(xiàn)在 官方不推薦 )3.使用multiparty模塊實(shí)現(xiàn)4.使用formidable插件實(shí)現(xiàn),本文給大家介紹nodejs+express(4.x+)實(shí)現(xiàn)文件上傳功能,需要的朋友參考下2015-11-11node.js中的http.response.writeHead方法使用說(shuō)明
這篇文章主要介紹了node.js中的http.response.writeHead方法使用說(shuō)明,本文介紹了http.response.writeHead的方法說(shuō)明、語(yǔ)法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下2014-12-12node實(shí)現(xiàn)登錄圖片驗(yàn)證碼的示例代碼
這篇文章主要介紹了node實(shí)現(xiàn)登錄圖片驗(yàn)證碼的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-04-04- 簡(jiǎn)單的說(shuō)Node.js就是運(yùn)行在服務(wù)端的JavaScript。Node.js是一個(gè)基于Chrome JavaScript運(yùn)行時(shí)建立的一個(gè)平臺(tái)。Node.js是一個(gè)事件驅(qū)動(dòng)I/O服務(wù)端JavaScript環(huán)境,基于Google的V8引擎,V8引擎執(zhí)行Javascript的速度非??欤阅芊浅:?/div> 2021-06-06
淺析node連接數(shù)據(jù)庫(kù)(express+mysql)
Node是一個(gè)Javascript運(yùn)行環(huán)境(runtime)。實(shí)際上它是對(duì)Google V8引擎進(jìn)行了封裝。V8引 擎執(zhí)行Javascript的速度非??欤阅芊浅:?。Node對(duì)一些特殊用例進(jìn)行了優(yōu)化,提供了替代的API,使得V8在非瀏覽器環(huán)境下運(yùn)行得更好2015-11-11Nodejs excel(.xlsx) 文件的讀寫(xiě)方式
這篇文章主要介紹了Nodejs excel(.xlsx) 文件的讀寫(xiě)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09在NodeJs中使用node-schedule增加定時(shí)器任務(wù)的方法
這篇文章主要介紹了從零開(kāi)始在NodeJs中使用node-schedule增加定時(shí)器任務(wù)的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06最新評(píng)論