一 Node.js介紹
Node.js是一個基于Chrome V8引擎的ECMAScript運行環(huán)境马澈,其使用了一個事件驅動罚随、非阻塞式I/O的模型垫毙,使其輕量又高效。
1.1 宿主環(huán)境
以網景的Netscape Navigator內置的JavaScript 1.1為藍本,由ECMA-262定義的 ECMAScript 是一種腳本語言標準艾蓝,它對該腳本語言的語法、類型斗塘、語句赢织、操作符等做出明確規(guī)定。
圖片1.png
Javascript是由ECMAScript馍盟、DOM于置、BOM三部分組成,瀏覽器實現了ECMAScript標準贞岭,使其能夠運行于瀏覽器八毯,我們稱瀏覽器為ECMAScript的宿主環(huán)境。
除了可以運行于瀏覽器環(huán)境外瞄桨,ECMAScript還可以運行于Adobe Flash環(huán)境中(稱為Action Script)话速,這時Adobe Flash也是ECMAScript的宿主環(huán)境。
Nodejs是另一種可以運行ECMAScript的宿主環(huán)境芯侥。
1.2 運行Node.js
宿主環(huán)境不同,依據ECMAScript標準實現的腳本的執(zhí)行方式也不同泊交,例如Javascript必須通過script標簽引入,在瀏覽器環(huán)境下才能被執(zhí)行柱查,Nodejs則需要通過命令終端以命令的形式執(zhí)行活合。
圖片:
2.1 基礎語法
Nodejs是ECMAScript的宿主環(huán)境,與瀏覽器中的Javascript類似物赶,所以其基礎語法是一致的,都遵循ECMAScript 的標準語法規(guī)范留晚。
實踐中不同的宿主環(huán)境又會在ECMAScript的基礎上進行擴展酵紫,例如瀏覽器的Javascript就擴展了window、location错维、navigator等對象奖地,在Nodejs中則擴展了一些其他的對象。
Nodejs的擴展,如下:
1赋焕、require 用來加載并執(zhí)行其它腳本文件
2参歹、module用來導出腳本文件的屬性或方法
3、exports 用來導出腳本文件的屬性或方法
4隆判、__dirname 用來獲取當前文件目錄
5犬庇、__filename 用來獲取當前文件的絕對路徑
6僧界、global 全局對象,類似于瀏覽器中的window臭挽。
2.2 ES6
Javascript在設計之初只是用來做簡單的數據較驗捂襟,后來發(fā)展到可以做一些網頁的動態(tài)效果用來增強用戶體驗,再后來ECMA組織負責組織制訂Javascript規(guī)范的制訂欢峰,將其稱為ECMAScript葬荷,伴隨著互聯網的迅速發(fā)展,對ECMAScript提出了更高的要求纽帖,為了適應開發(fā)的需要宠漩,ECMA組織也在不斷的修改完善ECMAScript的標準(如ECMAScript6簡稱ES6)。
然而新的標準所定義的規(guī)范在瀏覽器中的Javascript中并不能得到很好的應用懊直,原因在于瀏覽器種類較多扒吁,開發(fā)者并不能約束用戶必須使用何種瀏覽器,導致瀏覽器高低版本共存是常態(tài)吹截,為了考慮兼容瘦陈,開發(fā)者不得不放棄使用一些高級特性。
Nodejs則不會出現上述情況波俄,Nodejs由統一的團隊組織維護晨逝,通過版本升級方式可以及時跟進ECMAScript的標準,而且多數情況Nodejs是運行于服務端的懦铺,開發(fā)者可以決定使用Nodejs的版本捉貌,很多高級特性可以在Nodejs中得到很好的運用。
2.2.1 塊級作用域
任何一對花括號({})中的語句集都屬于一個塊冬念,在塊中聲明的變量在代碼塊外都是不可訪問的趁窃,稱之為塊級作用域,ES5以前沒有塊級作用域.
2.2.2 let關鍵字
let用于聲明變量(類似于var)急前,其聲明的變量只在當前代碼塊內有效醒陆,實際上是創(chuàng)建了塊級作用域.
2.2.3 const關鍵字
const 用于聲明常量,常量與變量不同裆针,變量聲明后其值可以任意更改刨摩,而常量一旦賦值就不允許被更改.
2.2.4 變量解構賦值
按照某種模式,從數組和對象中提取值世吨,對變量進行賦值這被稱為解構澡刹。
(a) 數組解構賦值
(b) 對象解構賦值
2.2.5 字符串擴展
2.png
2.2.6 數組擴展
3.png
2.2.7 函數擴展
(a) 默認參數,允許為函數指定默認參數
(b) reset參數耘婚,用于獲取多余的參數罢浇,將多余的參數裝到一個數組中
(c) 擴展運算符,它好比 rest 參數的逆運算,將一個數組轉為用逗號分隔的參數序列
(d) 箭頭函數嚷闭,使用“箭頭”(=>) 定義函數
3.1 模塊介紹
Nodejs在ECMAScript的基礎上擴展并封裝了許多高級特性攒岛,如文件訪問、網絡訪問等凌受,使得Nodejs成為一個很好的Web開發(fā)平臺阵子。
基于Nodejs這個平臺將Web開發(fā)常用的一些功能進行封裝,稱為模塊胜蛉。
3.2 系統模塊
在安裝Nodejs時一些模塊自動被安裝挠进,這些模塊大多由Nodejs官方維護,稱這類模塊為系統(核心)模塊誊册,如fs领突、path、os案怯、http等君旦。
模塊被加載后才能使用,Nodejs提供了全局的函數require加載模塊嘲碱。
1金砍、os模塊 獲取當前操作系統信息
2、fs模塊 文件讀寫操作
3麦锯、path模塊 路徑處理
3.3 文件模塊
除了系統模塊外恕稠,還有以文件形式存在的模塊,這些模塊由一些組織或個人根據不同的業(yè)務需求開發(fā)扶欣。
注:模塊也被稱為包鹅巍。
3.4 用戶模塊
1、Nodejs中文件模塊分兩種料祠,一種是.js結尾骆捧,一種是以.json結尾
2、require加載模塊路徑
相對路徑髓绽,如 ./ 或 ../
絕對路徑敛苇,如 E:\nodejs\02day\4-code\23cart 或 / (類unix系統)
直接寫模塊名會被當成系統模塊或加載node_modules目錄的模塊
3、exports和module.exports暴露模塊接口
4顺呕、多文件模塊(也叫包)指某一個功能模塊的集合接谨,通常由多個文件構成,統一到某一目錄集中管理塘匣,并且使用package.json記錄包的相關信息,例如模塊名稱巷帝、版本號忌卤、作者等,可使用npm init根據提示創(chuàng)建
3.5 第三方模塊
到目前為止楞泼,第三方模塊數量已經相當龐大驰徊,為了能夠更好的管理這些模塊笤闯,Nodejs官方提供了一個工具(npm)專門用于管理這些第三方模塊
npm (Node Package Manager) 這個工具隨Nodejs一起被安裝,可以使用 npm -v 檢測是否安裝
4.1 http服務模塊
使用Nodejs系統模塊http可以創(chuàng)建并啟動http服務器棍厂。
4.2 搭建服務器
1颗味、引入http模塊
屏幕快照 2018-02-02 下午3.27.03.png
2、創(chuàng)建http服務
屏幕快照 2018-02-02 下午3.28.43.png
3牺弹、監(jiān)聽端口
屏幕快照 2018-02-02 下午3.29.38.png
4浦马、監(jiān)聽http請求
屏幕快照 2018-02-02 下午3.30.37.png
5、瀏覽器訪問 http://localhost:3000
屏幕快照 2018-02-02 下午3.33.59.png
4.3 處理響應
通過res對象處理響應张漂,如狀態(tài)碼晶默,響應頭,響應主體等
屏幕快照 2018-02-02 下午3.43.38.png
4.4 處理請求
使用req對象處理請求航攒,如請求方式磺陡、請求頭、請求參數漠畜、請求主體等
屏幕快照 2018-02-02 下午3.49.28.png
get 查詢參數,查詢字符串做為地址的一部分,需要使用url模塊進行解析才可以得到
屏幕快照 2018-02-02 下午3.55.56.png
post參數做為請求主體傳遞
屏幕快照 2018-02-02 下午3.59.25.png
4.5 靜態(tài)網站
我們通過瀏覽器所能看到的網頁內容實質上是服務器返回的html字符串币他,瀏覽器進行渲染輸出
屏幕快照 2018-02-02 下午4.03.24.png
瀏覽器解析html標簽過程中,遇到img憔狞、script蝴悉、link、iframe等標答時會再次向服務器發(fā)起請求躯喇,服務器也需要做出響應
屏幕快照 2018-02-02 下午4.07.44.png
4.5.1 路徑
路徑是描述位置的一種方式辫封,遵循一定規(guī)則,即路徑都有一個起點稱之為“根”廉丽,以“/”或“\”做為分隔符倦微,使用“.”和“..”分別表示當前級和上一級。路徑分為絕對路徑和相對路徑正压。
將以“根”開始欣福,使用“/”或“\”分隔的路徑稱為絕對路徑。
將以“.”或“..”開始焦履,使用“/”或“\” 分隔的路徑稱為相對路徑拓劝。
1、文件系統路徑
操作系統上的文件都是存儲在磁盤中的嘉裤,使用路徑可以準確確定到某個文件的位置郑临。
文件系統中盤符(windows)或“/”(類unix)為路徑的“根”,使用分隔符“/”或“\”分隔的是真實存在的目錄名稱和文件名屑宠。
2厢洞、網絡路徑
網絡路徑即url,用來標識互聯網資源位置的一種方式,通常由協議躺翻、服務器地址丧叽、路徑、文件名構成公你。
網絡中服務器地址開始為路徑的“根”(用“/”)表示踊淳,使用分隔符“/”或“\”分隔的不一定是真實的目錄名稱和文件名。
網絡中的“根”路徑可以通過服務器軟件映射到文件系統中的任意位置陕靠,例如 Apache 配置documentRoot更網站根目錄迂尝。
目錄不等路徑
根+目錄+分隔符+文件名 格式
E:\asdf\sadf\aa.txt 文件系統的
http://localhost/dsaf/ads/index.html 網絡系統的
判斷路徑位置應從路徑本身出發(fā),而不是站在目錄的角度觀察懦傍。
在文件系統中目錄和文件都是真實存在的雹舀,路徑與目錄和文件的關系是一一對應的,以目錄角度確定路徑不出有問題粗俱。
但是網絡中目錄和文件不一定真實存在说榆,路徑與目錄和文件不一定是一一對應的關系,以目錄角度確定路徑就會出問題寸认。