2019獨角獸企業重金招聘Python工程師標準>>>
Node.js中的模塊
????在Node.js中,以模塊為單位劃分功能,通過一個完整的模塊加載機制使得開發人員可以將應用程序劃分為多個不同的部分。模塊的使用可以提高代碼重用率,提高應用程序的開發效率,而且開發人員可以根據具體的需求引入第三方模塊或者自定義模塊到應用程序中。 ????在Node.js中一個Node.js文件就是一個模塊,這樣的文件可以是JavaScript代碼腳本,可以是JSON,也可以是編譯過的C/C++擴展。
Node.js的核心模塊與文件模塊
????在開發中可以使用require()方法加載模塊,如果是加載Node.js的核心模塊,只需要將被加載的模塊的名稱作為參數傳給require()即可,程序示例:
var http = require('http'); //加載Node.js的核心模塊http模塊
var fs = require('fs'); //加載Node.js的核心模塊fs模塊var server = http.createServer(); //使用http模塊創建服務
server.on('connection', function(request, response){ //通過on()方法監聽connection事件fs.readFile('./text.txt', function(err, data){ //使用fs模塊的readFile()方法讀取text.txt文件內容if(err){console.log('文件讀取時出現錯誤:' + err);}else{console.log(data.toString());}});
});server.listen(8000, '127.0.0.1');
程序運行截圖:
????在使用require()方法加載模塊的時候,如果寫錯了模塊的名稱就會引起程序報錯,require()函數將會拋出異常,程序示例:
var http = require('aaaa'); //故意寫錯模塊名稱var server = http.createServer();
server.on('connection', function(request, response){console.log(request.url);
});server.listen(8000, '127.0.0.1');
程序運行截圖:
以下的幾種文件可以作為Node.js的模塊文件:
- 后綴名為.js的JavaScript腳本文件。
- 后綴名為.json的JSON文本文件。
- 后綴名為.node的經過編譯的二進制模塊文件。 ????在Node.js中加載模塊時需要指定模塊文件的完整路徑以及文件名稱。可以是相對路徑也可以是絕對路徑,程序示例:
- (1)創建myModule.js:
var myFunction = function(){console.log('自定義模塊中的方法執行了。');
}exports.myFunction = myFunction;
- (2)創建module.js:
var myModule = require('./myModule.js'); //使用require()方法引入自定義模塊myModule.myFunction(); //執行自定義模塊中的方法
????程序運行截圖:
以類的方式定義模塊
????在定義模塊時可以將“exports”對象寫為“module.exports”,但是在以類的方式定義模塊的時候只能寫做“module.exports”。程序示例:
- (1)創建student.js模塊文件:
var _Name,_Age;
var Name = '', Age = 0;//模塊對象的構造方法
var student = function(name, age){_Name = name;_Age = age;
}//獲取私有變量_Name的值
student.prototype.GetName = function(){return _Name;
}//設置私有變量_Name的值
student.prototype.SetName = function(name){_Name = name;
}//獲取私有變量_Age的值
student.prototype.GetAge = function(){return _Age;
}//設置私有變量_Age的值
student.prototype.SetAge = function(age){_Age = age;
}student.prototype.Name = Name;
student.prototype.Age = Age;module.exports = student;
- (2)創建app.js文件:
var student = require('./student.js');var s1 = new student('Tom', 12);
/*
*獲取模塊中的私有變量
*/
console.log('模塊中的私有變量:');
console.log('姓名:' + s1.GetName());
console.log('年齡:' + s1.GetAge());//設置模塊中中公有變量的值
student.Name = 'Danny';
student.Age = 14;/*
*獲取模塊中公有變量值
*/
console.log('模塊中的公有變量的值:');
console.log('姓名:' + student.Name);
console.log('年齡:' + student.Age);
程序運行截圖:
加載node_modules目錄中的模塊
????在Node.js中使用require()方法加載模塊時只傳入了文件名稱作為require()方法的參數,而沒有指明文件的路徑,
require(‘module.js’); //只指定了文件的名稱,沒有指定文件的路徑
????則程序在運行的時候Node.js會將該文件視為node_modules目錄下的文件。
通過目錄加載模塊
????在Node.js中,把目錄名稱指定為模塊名,就可以通過目錄對模塊進行管理。可以直接require一個目錄,假設有一個目錄名為folder,如:
var myMod = require('./folder');
????程序在運行的時候,Node將搜索整個folder目錄,Node會假設folder為一個包并試圖找到包定義文件package.json。如果folder 目錄里沒有包含package.json文件,Node會假設默認主文件為index.js,即會加載index.js。如果index.js也不存在, 那么加載將失敗。
從全局目錄中加載模塊
????如果在操作系統的環境變量中設置NODE_PATH變量,并且已經將變量值設置為一個有效的磁盤目錄,在使用require()方法加載模塊時只指定了模塊的名稱而沒有指定模塊的路徑,而且Node.js從其他路徑中找不到需要被加載的模塊文件時,Node.js將會從NODE_PATH變量值所指向的磁盤目錄中尋找并加載模塊文件。如果最終都沒有找到,require()方法就會拋出異常。
require()方法對模塊的查找策略
????Node.js的require()方法加載模塊時,對模塊文件的查找策略如下圖: