node基礎知識

1胳徽、url網址解析

url.parse(url募闲,true,true)將url解析成json對象
第二個參數true可以把query屬性的值變?yōu)閷ο螅谌齻€true可以將不含協(xié)議(http或者https)的host解析出來虎锚。


image.png

url.format({})將json對象解析成url地址
url.resolve('http://baidu.com','/course/list')生成合法的url地址,第二個參數是路徑枚赡。

2拴还、QueryString

  • 序列化字符串
querystring.stringify({name:'scott',course:['jade','node'],from:''})

返回一個字符串

'name=scott&course=jade&course=node&from='

第二個參數是連接符,默認是&鸦难,可以改為‘根吁,’第三個參數是key和value之間的連接符,默認是=合蔽,可以改為‘:’

  • 反序列化
querystring.parse('name=scott&course=jade&course=node&from=')

返回一個對象

{name:'scott',
course:['jade','node'],
from:''}

第二個參數和第三個參數同stringify第四個參數是參數個數击敌,默認是1000個,通過把拴事。沃斤。。設為0就沒有限制了

  • querystring.escape('')
    轉義
  • querystring.unesacpe('')
    反轉義

3刃宵、http

域名解析過程

  • 1衡瓶、 Chrome搜索自身的DNS緩存
  • 2、 搜索操作系統(tǒng)自身的緩存(瀏覽器沒有找到緩存或者緩存已經失效)
  • 3牲证、 讀取本地HOST文件
  • 4哮针、瀏覽器發(fā)起一個DNS的一個系統(tǒng)調用
  • 5、 瀏覽器獲得域名對應的IP地址后坦袍,發(fā)起HTTP三次握手十厢。
  • 6、 TCP/IP連接建立后捂齐,瀏覽器就可以向服務器發(fā)送http請求了蛮放,比如說用http的get方法請求一個根域里的一個域名,協(xié)議可以采用http1.0的一個協(xié)議
    -7奠宜、 服務端接收了這個請求包颁,根據路徑參數,經過后端的一些處理后压真,把處理后的一個結果的數據返回給瀏覽器娩嚼,如果是網頁頁面就會把整個個html代碼返回給瀏覽器
  • 8、 瀏覽器拿到html頁面代碼后榴都,在解析和渲染這個頁面的時候待锈,里面的js、css嘴高、圖片靜態(tài)資源竿音,他們同樣也是一個個http請求和屎,都需要經過上面的步驟。
  • 9春瞬、瀏覽器根據拿到的資源對頁面進行渲染柴信,最終把一個完整的頁面呈現給了用戶。

4宽气、回調随常、阻塞和非阻塞、異步和同步萄涯、單/多線程绪氛、I/O、事件驅動涝影、事件循環(huán)

  • 回調是異步編程最基本的方法枣察,對nodejs來說需要按順序執(zhí)行異步邏輯的時候,通常采用后續(xù)傳遞的方式燃逻,也就是說序目,將后續(xù)邏輯封裝在回調函數中作為起始函數的參數。
  • js是同步的伯襟,即是按代碼完成順序依次執(zhí)行猿涨,上一步沒有執(zhí)行完不能執(zhí)行下一個任務。異步就是不等上一個執(zhí)行完就執(zhí)行下一個任務姆怪,是異步的執(zhí)行順序叛赚,在js里的異步函數是setTimeout(callback,1000)和setInterval(callback,1000)
  • 單線程就是按順序執(zhí)行片效,一次執(zhí)行某一段代碼红伦,執(zhí)行完后再執(zhí)行下一段代碼,多線程就是能不等上段代碼處理完就往下執(zhí)行淀衣。
  • I/O 表示磁盤的寫入和讀出,在nodejs里為文件資源數據庫提供接口召调。向文件系統(tǒng)發(fā)送請求的時候不用等著硬盤膨桥,當硬盤準備好的時候非阻塞接口會通知到node
  • 阻塞就是如果產生死循環(huán)了,不能往下執(zhí)行了就會發(fā)生阻塞唠叛。js可以通過回調函數的方式進行異步編程只嚣,達到非阻塞的效果
  • 事件驅動就是監(jiān)聽事件,但不執(zhí)行艺沼,事件發(fā)生的時候執(zhí)行相應的操作(即回調函數)册舞。注冊回調即基于事件驅動的回調。
  • 事件循環(huán)障般,倘若有大量的異步操作调鲸,eventloop回調函數隊列盛杰,當異步函數執(zhí)行的時候,回調函數就會壓入這個先進先出隊列藐石,對nodejs來說不斷查詢即供,當讀取到事件時,調用相應的回調函數于微。

5逗嫡、事件模塊

events,一個對象EventEmitter
支持多個監(jiān)聽器株依,不要超過十個(當然也可以修改)

var EventEmitter=require('events').EventEmitter;
var life=new EventEmitter();
life.setMaxListeners(11)//設置同名的name的最大監(jiān)聽函數的個數
life.on('name',callback)//綁定事件
life.emit('name',參數)//觸發(fā)事件,返回的是true或者false驱证,true代表有監(jiān)聽,即life.on()
life.removeListener('name',具名函數的名字)//移除事件恋腕,不能為匿名函數function(){}
life.removeAllListener()//批量移除
life.listeners('name')//查詢正在監(jiān)聽的name的函數抹锄,為數組
EventEmitter.listenerCounter(實例名life,事件名‘name’)//獲得某個時間的監(jiān)聽數量

6吗坚、http.request()

http.request(options[,callback])
options可以為對象祈远、字符串或者url,如果是字符串商源,會自動使用url.parse()解析车份,如果是url對象,默認轉換成options對象牡彻。
可選的參數callback回座位單次監(jiān)聽器被添加到‘response’事件扫沼。
使用 http.request() 必須總是調用 req.end() 來表明請求的結束,即使沒有數據被寫入請求主體庄吼。

7缎除、http.get()

http.get(options[, callback])
get請求不帶請求主體
參數和request一樣,唯一的區(qū)別是get自動調用req.end()

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末总寻,一起剝皮案震驚了整個濱河市器罐,隨后出現的幾起案子,更是在濱河造成了極大的恐慌渐行,老刑警劉巖轰坊,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異祟印,居然都是意外死亡肴沫,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門蕴忆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來颤芬,“玉大人,你說我怎么就攤上這事≌掘穑” “怎么了汰具?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長沉衣。 經常有香客問我郁副,道長,這世上最難降的妖魔是什么豌习? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任存谎,我火速辦了婚禮,結果婚禮上肥隆,老公的妹妹穿的比我還像新娘既荚。我一直安慰自己,他們只是感情好栋艳,可當我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布恰聘。 她就那樣靜靜地躺著,像睡著了一般吸占。 火紅的嫁衣襯著肌膚如雪晴叨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天矾屯,我揣著相機與錄音兼蕊,去河邊找鬼。 笑死件蚕,一個胖子當著我的面吹牛孙技,可吹牛的內容都是我干的。 我是一名探鬼主播排作,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼牵啦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了妄痪?” 一聲冷哼從身側響起哈雏,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎衫生,沒想到半個月后僧著,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡障簿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了栅迄。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片站故。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出西篓,到底是詐尸還是另有隱情愈腾,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布岂津,位于F島的核電站虱黄,受9級特大地震影響,放射性物質發(fā)生泄漏吮成。R本人自食惡果不足惜橱乱,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望粱甫。 院中可真熱鬧泳叠,春花似錦、人聲如沸茶宵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽乌庶。三九已至种蝶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瞒大,已是汗流浹背螃征。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留糠赦,地道東北人会傲。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像拙泽,于是被迫代替她去往敵國和親淌山。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理顾瞻,服務發(fā)現泼疑,斷路器,智...
    卡卡羅2017閱讀 134,656評論 18 139
  • 第一章 Nginx簡介 Nginx是什么 沒有聽過Nginx荷荤?那么一定聽過它的“同行”Apache吧退渗!Ngi...
    JokerW閱讀 32,674評論 24 1,002
  • iOS網絡編程讀書筆記 Facade Tester客戶端門面模式的實例(被動版本化) 被動版本化,所以硬編碼URL...
    melouverrr閱讀 1,606評論 3 7
  • AJAX 原生js操作ajax 1.創(chuàng)建XMLHttpRequest對象 var xhr = new XMLHtt...
    碧玉含香閱讀 3,201評論 0 7
  • 今天晚上回家晚飯是在一家饸烙面館吃的蕴纳,這是我吃過的最好吃的会油,我還特意查了一下是什么材料做的。 說起...
    憨人崔閱讀 337評論 0 1