node筆記(二)
阿新 • • 發佈:2018-12-10
node 二
一 同步與非同步的對比
非同步:非同步讀取檔案 讀取檔案的程式碼的順序不一定和輸出的結果順序一樣
同步:同步讀取檔案 同步讀取檔案會有返回值,我們可以通過變數接受,順序是一一對應的,同步讀取檔案,因為立馬有返回值,所以他是在主執行緒中進行程式碼執行的,主執行緒中異常可以通過異常處理來捕獲並且進行處理
二 異常處理結構,處理同步讀取檔案的結構
1 try( 嘗試執行的程式碼塊,如果沒有錯誤就將這個程式碼執行完畢 ) 2 catch(exp){ 如果有錯,就會使用catch結構,捕獲異常並進行異常處理 } 其中(exp)指的就是,如果有錯誤,所返回錯誤物件 3 finally{ 無論如何都會執行的程式碼 } try{ //只要有錯誤,就立馬進行跳轉到catch var b = fs.readFileSync('./data/bb.txt','utf-8') console.log(b) } //e就是有錯誤,所返回的錯誤物件 catch(e){ console.log('這個檔案讀取失敗') } finally{ console.log('無論如何都會被執行') }
三 重點 node模組
1 核心模組 直接引入然後呼叫方法即可 2 第三方模組 先下載,然後再引用 3 自定義模組 1) 在物件裡面掛載成員 掛載成員的方式: 1 global:不建議使用,它就相當於node中的全域性變數成員,每個node中的檔案都可以使用,同時它是一個物件,就相當於是window global的缺點:使用的時候,成員不明確;後面引用的同名成員會將前面的同名成員覆蓋;將所有的成員掛載到一個物件上,不方便後期的管理 2 在沒個慕課穿件之後都會有一個內建物件,這個內建物件在外部引用模組的時候會自動返回 1 exprots 2 module.exprots module.exprots = ()=>{ 需要封裝的功能程式碼函式 } 總結:建議不要用重置物件的模式去重置物件 例如: exprots = ()=》{} 建議:用 . 的語法去使用
四 node的載入規則
1 優先載入快取 如果快取中有當前需要的模組,那麼直接從快取中獲取,如果沒有,那麼載入模組,並將模組儲存到快取中 2 載入核心模組 優先從快取中載入,如果沒有的話,再去執行載入慕課核心模組 3 自定義模組載入規則 優先從快取中載入,如果快取中沒有的話,再去載入使用者模組 載入模組的時候,預設會載入這個目錄下的index檔案 index > index.jx > index.json > index.node > 崩 4 第三方模組載入規則 1 先查詢當前目錄中node_modules 2 如果有,就查詢同名的資料夾 3 查詢檔案中的package.json檔案 4 查詢package.json中main屬性。這個屬性所指向的路徑 5 載入這個檔案,main屬性指向的 6 找不到對應檔案,或者沒有package.json檔案,或者沒有main屬性,或者main屬性指向的檔案不存在,就會預設載入這個目錄下的index檔案 7 如果壓根都沒有直達模組資料夾,或者壓根就沒有node_modules資料夾,就會查詢上一級目錄,如果上一級沒有,再往上級目錄,知道這個目錄所在的碟符根目錄(查詢只能只往上,不會在查詢的過程中往下) 8 如果再沒找到就只能報錯
四 重點 模板引擎
1 模板引擎
先下載模板引擎 npm install art-template
引入模板 var template = require('art-template')
2 然後就是呼叫模板API
API 一:
var render = template.complie(模板內容);返回一個函式render
var result = render(資料物件);返回渲染的結果
API二:
var result = tempalte.render("模板內容,資料");返回的是渲染的結果
API三:
var result = template(模組路徑,資料)
五 注意:
1 在for迴圈裡面使用非同步方法,迴圈會先執行,會導致索引越界
2 在for迴圈裡面。把var 變成 let ,裡面的i值,會變成有作用域,以此來處理索引越界的問題
3 不要使用for裡面的i值去判斷是否讀取完畢的判斷,因為是非同步請求,所以不確定是否能夠都及時返回,需要判斷的時候,用count計時器去判斷
4 ...解構 拆元素,可以用於在連結兩個陣列
也可以用concat()方法去
all = all.concat(all2);//all和all2代表的是兩個不同的陣列
all.phsu(...all2);
5 sort(),進行數組裡面排序。首先得先在sort()裡面傳遞一個函式,函式為定義排序的規則
如 function sortAll(x,y){
if(x.size>y.size){
render -1
}else{
render 1
}
}
賦值:
all.sotr(sortAll)
node(三)
一 node中的樣式檔案
1 在node中,資料會根據副檔名進行自動的編碼格式的處理
二 indexOf()
1 在陣列中,出現的時候,返回1,不存在的情況下就返回-1
2 獲取索引為0的格式
url.indexoF('/images')===0
獲取的是,以'./images'開頭的程式碼
三 關於上傳檔案
1 獲取檔案
var myfile = document.getElementById("img").files[0]
2 建立formdata 收集使用者資料,作為引數傳遞
var data = new FormData()
3 formdata的append方法,新增檔案
data.append('myimg',myfile)
4 重點強調:如果是使用FormData結合ajax使用,那麼必須在發起請求的時候新增多兩個屬性
processData:false;//不要ajax來處理資料,由formdata進行處理
contentType:false;//不要ajax進行資料的編碼,由formdata進行編碼處理