1.Node.js概述
Node.js是運作在伺服器端的環境
(1)對比JS
JS運作在用戶端浏覽器,存在多種浏覽器,存在相容性問題;Node.js運作在伺服器端,隻有V8引擎一種解釋器,代碼不存在相容性問題。
兩者都有共同的自定義對象和内置對象(ES對象),不同的宿主對象
JS用于操作浏覽器的内容,實作使用者互動,Node.js用于伺服器端開發,例如操作資料庫,調用其它伺服器
(2)運作方式
腳本模式
node 拖拽檔案 回車
互動模式
node 回車 進入互動模式
退出互動模式 兩次ctrl+c, ctrl+d
(3)特點
屬于單線程運作邏輯,不會産生死鎖,支援數萬個并發連接配接,适合做基于社交網絡的大規模WEB應用
不适合做CPU密集型應用
2.全局對象
(1)global
檢測變量或者函數是否為全局的
在Node.js的互動模式下,屬于全局作用域
在腳本檔案下,不屬于全局作用域
js下global名稱為window
(2)console對象
提供了一組用于調試控制台的方法
console.log(1); //輸出日志
console.info(2); //輸出消息
console.warn(3); //輸出警告
console.error(4); //輸出錯誤
console.time() 開始計時
console.timeEnd() 結束計時
開始計時和結束計時兩者輸出的值要保持一緻
(3)process對象
程序:在計算機上開啟的任何軟體都代表程序
process.arch 檢視目前CPU架構
process.platform 檢視目前的作業系統
process.version 檢視目前Node.js的版本号
process.pid 檢視目前的程序編号
process.kill() 結束指定編号的程序
(4)Buffer對象
緩沖區,緩沖存儲器
是記憶體中的一塊臨時存儲資料的區域
var buf=Buffer.alloc(5, 'abcde');//建立buffer,配置設定空間大小為5個位元組,并存儲資料
buf.toString() //将buffer轉為字元串
Node.js下每個漢字占三個位元組
1.子產品
require: 是一個函數,用于引入其他子產品
module.exports: 導出的對象,預設是一個空對象要暴露的内容需要添加到對象中
__dirname: 擷取目前子產品的絕對路徑
__filename: 擷取目前子產品的絕對路徑+子產品名稱
2.子產品的分類
子產品分為三種:自定義子產品、核心子產品、第三方子產品
以路徑開頭 不以路徑開頭
檔案形式子產品 require('./circle.js') require('querystring')
常用于引入自定義子產品 用于引入官方提供核心子產品
目錄形式 require('./demo-01.js') require('tao')
首先會找到目錄下查找package.json 檔案中main 對應的檔案,果 找不到自動查找01.js 首先會到目前目錄下的node_modules目中尋找tao目錄,用于引入第三方子產品 如果找不到會一直往上一級目錄的node_modules目錄中尋找
3.包的npm
包:指的是第三方子產品,是一個目錄子產品
npm:用來管理包的工具子產品,屬于是第三方子產品,在Node.js安裝時候已經附帶安裝
npm -v 檢視npm版本
CommonJS:是一種規範,制定了Node.js的子產品規範
網址: www.npmjs.com
(1)切換指令行路徑
在要進入的目錄的空白區域,按住shift,單擊滑鼠右鍵,選擇“在此處打開powershell視窗”
在cmd下
cd 粘貼路徑
如果有盤符的切換,需要添加 盤符名稱:
(2)npm指令
npm init -y 初始化一個package.json檔案,記錄下載下傳安裝的包
npm install 包名稱 下載下傳安裝指定的包,會将包放入到目前目錄的 node_modules 目錄下,如果不存在會自動建立;同時會生成 package-lock.json 的檔案用于記錄所有包的版本号,package.json中隻是記錄目前安裝包的安裝資訊
npm install 自動下載下傳package.json 和 package-lock.json中記錄的包
4.查詢字元串子產品(querystring)
查詢字元串:浏覽器向伺服器傳遞資料的一種方式,位于網址中
http://search.jd.com/Search?keyword=筆記本&price=4000
協定 域名或者IP 字元串查詢
查詢字元串子產品:專門用于操作查詢字元串的工具
parse() 将查詢對象解析為對象
5.url
統一資源定位,網際網路上的任何的資源(html.css.js,js,圖像,視訊,聲音)都有相應的URL
http://www.codeboy.com:9999/product_details.html?lid=13#one
協定 域名或者IP位址 端口 檔案在伺服器的路徑 查詢字元串 錨點
6.定時器子產品(timer)
(1)一次性定時器
開啟
let timer=setTimerout(回調函數,間隔時間)
當間隔時間到了,會調用一次回調函數,間隔時間機關是毫秒
清除
clearTimeout(timer)
(2)周期性定時器
let timer=setlnterval(回調函數,間隔時間)
每隔一段時間,調用一次回調函數
clearinterval(timer)
(3)立即執行定時器
var timer=setlmmediate(回調函數)
clearlmmediate(timer)
process.nextTick(回調函數)
沒有清除
定時器的回調函數是在事件隊列中執行,當程式執行完才會執行事件隊列的回調函數

1.同步和異步
同步:在主程式中執行,會阻止主程式中後續代碼的執行,通過傳回值擷取結果
異步:在一個獨立的線程中執行,不會阻止主程式後續代碼的執行,通過回調函數擷取結果
2.檔案系統子產品 (fs)
檔案分為目錄形式和檔案形式
(1)檢視檔案狀态
statSync(檔案的路徑) / stat(檔案的路徑,回調函數);
isDirectory() 是否為目錄
isFile() 是否為檔案
(2)建立目錄
mkdirSync(檔案的路徑)/mkdir(檔案的路徑,回調函數)
(3)移除目錄
rmdirSync(檔案路徑) /rmdir(檔案的路徑,回調函數)
隻允許移除空目錄
(4)讀取目錄
readdirSync(檔案路徑)/readdir(檔案路徑,回調函數)
(5)清空寫入檔案
writeFileSync(檔案的路徑,寫入的資料)/writeFile(檔案的路徑,回調函數)
(6)追加寫檔案
appendFileSync(檔案的路徑,寫入的資料) /appendFile (檔案的路徑,回調函數)
如果檔案不存在,首先建立檔案然後寫入資料
如果檔案存在,會在檔案的末尾追加寫入資料
(7)讀取檔案
readfileSync(檔案的路徑)/readfile(檔案的路徑,回調函數)
(8)删除檔案
unlinkSync(檔案的路徑)/unlink(檔案路徑,回調函數)
(9)檢測檔案是否存在
existsSync(檔案的路徑) 存在 return true 不存在 return false
(10)拷貝一個檔案
copyFileSync(原檔案路徑,目标檔案路徑)/ copyFile(原檔案路徑,目标檔案路徑,回調函數)
3.檔案流
creatReadStream() 建立可讀取的檔案流
creatWriteStream() 建立可寫入的檔案流
on(事件名稱,回調函數) 一旦觸發事件,自動調用回調函數,其中事件名稱是固定的字元串形式
pipe() 管道,可以将讀取的流添加到寫入的流
4.http 協定
http:超文本傳輸協定
是浏覽器和WEB伺服器之間的通信協定
(1)通用頭資訊(general)
Request URL:請求的URL,要請求資源
Request Method:請求的方法,對資源操作的方式 get post....
Status Code :響應狀态碼
1**:已經接受到了部分請求,還沒結束
2**:成功響應
3**:響應的重定向,發生跳轉
4**:用戶端錯誤
5**:伺服器錯誤
(2)響應頭資訊(response)
Location:要跳轉的URL通常結合狀态3**使用
Content-type:響應的内容類型,可以解決中文亂碼
text/html; charset=utf-8
(3)請求頭資訊(request)
(4)請求主體
隻有在傳遞資料的時候才會出現
5.http子產品
可以用來WEB建立伺服器
WEB伺服器:給用戶端提供資源的伺服器例如資料檔案...
建立WEB伺服器
const app=http.createServer();
設定端口
app.listen(8080,()=>{
console.log('WEB伺服器啟動成功')
});
添加事件,通過事件接受請求做出響應
app.on('request',(req,res)=>{
req 請求對象
req.url擷取請求的URL ,格式 '/xxxx'
req.method 擷取請求方法
res 響應的對象
res.writeHead() 設定相應到浏覽器
res.end() 結束并發送響應
})