模塊
Node.js 提供了exports 和 require 兩個對象,其中 exports 是模塊公開的接口,require 用于從外部獲取一個模塊的接口,即所獲取模塊的 exports 對象。
接下來我們就來創建hello.js文件,代碼如下:
exports.world = function() {
console.log('Hello World');
}
在以上示例中,hello.js 通過 exports 對象把 world 作為模塊的訪問接口,在 main.js 中通過 require('./hello') 加載這個模塊,然后就可以直接訪 問main.js 中 exports 對象的成員函數了。
require方法接受以下幾種參數的傳遞:
http、fs、path等,原生模塊。
./mod或../mod,相對路徑的文件模塊。
/pathtomodule/mod,絕對路徑的文件模塊。
mod,非原生模塊的文件模塊。
我們以計算圓的周長和面積的兩個方法為例:
var PI = Math.PI;
exports.area = function (r) {
return PIrr;
};//exports 是對象,向外提供了area方法接口
exports.circumference = function (r) {
return 2PIr;
};
以上保存為circle.js,下方通過require調用模塊:
var circle = require("./circle.js");//require通過引入模塊文件,找到exports對象提供的接口
console.log("The area of a circle of radius 4 is " + circle.area(4));
編寫稍大一點的程序時一般都會將代碼模塊化。在NodeJS中,一般將代碼合理拆分到不同的JS文件中,每一個文件就是一個模塊,而文件路徑就是模塊名。
在編寫每個模塊時,都有require、exports、module三個預先定義好的變量可供使用。
模塊名可使用相對路徑(以./開頭),或者是絕對路徑(以/或C:之類的盤符開頭)。另外,模塊名中的.js擴展名可以省略。
模塊化的優缺點:
a>優點:
可維護性
1.靈活架構,焦點分離
2.方便模塊間組合、分解
3.方便單個模塊功能調試、升級
4.多人協作互不干擾
可測試性
1.可分單元測試
b>缺點:
性能損耗
1.系統分層,調用鏈會很長
2.模塊間通信,模塊間發送消息會很耗性能
Node.js常用模塊和組件
包管理 Package Management: NPM
框架 Framework: ExpressJS
模板 Template: Jade
中間件 Middleware: Connect
WebSocket: Socket.io
數據庫 Database: Mongo DB (選了個自己喜歡的)
Mongoose (as a MongoDB ORM)
調錯 Debugging: Node Inspector
測試 Test: Mocha + should.js
控制無止境的內嵌回調 (Control the Callback flow): Async