1.模組機制
commonJS模組機制出現的目的是為了建立js在web伺服器,桌面程序,瀏覽器等方面形成生態系統。而node js就是這種規範的一種實現,用requird來引入其他文件,同樣,npm也遵循了commonJS定義的套件規範,從而形成了一套完整的生態系統。
模組定義並匯出
例如有以下一個名為circle.js的檔案
exports.getName = function(name) { return name }
模組載入
var circle = require('/circle.js') console.log(circle.getName('WPY'))
模組載入策略
node模組主要可分為兩大類:
原生模組和自訂模組,所謂原生模組就是node自己定義的模組,例如HTTP,fs模組,此類模組載入速度最快。
還有一類是自訂模組,包括包模組,和我們自己定義的檔案。無論是原生模組還是自訂模組在第一次載入後都會被node緩存,所以第二次請求時是不會有開銷的。
原生模組載入:
require()方法在解析檔名之後,最優先在模組快取中查找,然後在node的原生模組中查找
從檔案載入
module.path 對於每一個被載入的檔案模組,在建立這個模組物件的時候都會有一個paths屬性。其路徑指向引入模組的路徑。
在請求絕對路徑模組時,不會去遍歷node_module載入速度最快。
非同步程式設計
高介函數
高介函數是將函數當作參數,或是作為傳回值的函數。
function foo(X) { return function() { return x } }
NODE帶來的最大特性莫過於機遇事件驅動的非阻塞IO。
非同步程式設計解決方案
1.事件發布/訂閱模式
事件監聽器模式是廣泛應用於非同步編程,是回調函數的時間化,又稱發布/訂閱模式。
//订阅 emitter.on("event1", function(message){ console.log(message) }) //发布 emitter.emit("event1", "I am message")
2.Promise模式
promise物件有三種狀態,未完成態,完成態,失敗態。
promise物件要具有then方法,對於then 方法有以下幾點要求
1.接受完成態,錯誤態的回呼方法。
2.只接受function,其餘物件將被忽略
3.繼續返回promise對象,以實現鍊式呼叫