Node.js建立模組

來源:互聯網
上載者:User

模組是 Node.js 應用程式的基本組成部分,檔案和模組是一一對應的。換言之,一個Node.js 檔案就是一個模組,這個檔案可能是 JavaScript 代碼、JSON 或者編譯過的 C/C++ 擴充。 var http = require('http'),其中 http是 Node.js 的一個核心模組,其內部是用 C++ 實現的,外部用 JavaScript 封裝。我們通過require 函數擷取了這個模組,然後才能使用其中的對象。

1、建立模組

建立模組很簡單,就像寫一個單獨的函數一樣,不過模組建立完成後,需要在其它地方去調用它,才能發揮它的效果,一樣的像函數一樣。首先建立一個module.js用來建立模組:


[javascript]
var x,y; 
exports.setArgs=function(a,b){ 
    x=a; 
    y=b; 

exports.mult=function(){ 
    console.log(x+"和"+y+"的乘積是:"+x*y); 

var x,y;
exports.setArgs=function(a,b){
    x=a;
    y=b;
}
exports.mult=function(){
    console.log(x+"和"+y+"的乘積是:"+x*y);
}然後寫一個getModule.js來調用這個模組的內容:


[javascript]
var module=require("./module"); 
module.setArgs(5,4); 
module.mult(); 

var module=require("./module");
module.setArgs(5,4);
module.mult();在websotrm中,右鍵運行getModule.js,控制台輸出結果


當然,這隻是最簡單的一個例子,純粹是學習如何建立和調用模組。

 

2、覆蓋exports

上面的代碼示範了直接把函數封裝到模組當作,接下來示範如何把一個對象封裝到模組當中。修改module.js如下:


[html]
function calc(){ 
    var x,y; 
    this.setArgs=function(a,b){ 
        x=a; 
        y=b; 
        console.log("設定參數成功。"); 
    }; 
    this.mult=function(){ 
        console.log(x+"和"+y+"的乘積是:"+x*y); 
    }; 
    this.add=function(){ 
        console.log(x+"和"+y+"的和是:"+(x+y)); 
    }; 

exports.calculator=calc; 

function calc(){
    var x,y;
    this.setArgs=function(a,b){
        x=a;
        y=b;
        console.log("設定參數成功。");
    };
    this.mult=function(){
        console.log(x+"和"+y+"的乘積是:"+x*y);
    };
    this.add=function(){
        console.log(x+"和"+y+"的和是:"+(x+y));
    };
}
exports.calculator=calc;上面的代碼把一個calc函數封裝到模組裡面,然後匯出為calculator對象,可以通過執行個體化這個calculator對象來調用相關演算法函數。修改getModule.js如下:


[javascript]
/獲得calculator對象  
var module=require("./module").calculator; 
console.log(module); //看看是什麼東西  
//執行個體化,如果不做這一步,想直接通過module.Func會出錯  
var moduleEntity=new module(); 
//驗證moduleEntity是否可以正常調用函數  
console.log(moduleEntity.setArgs); 
//驗證通過,此方法可以使用  
moduleEntity.setArgs(4,2); 
moduleEntity.add(); 
moduleEntity.mult(); 

//獲得calculator對象
var module=require("./module").calculator;
console.log(module); //看看是什麼東西
//執行個體化,如果不做這一步,想直接通過module.Func會出錯
var moduleEntity=new module();
//驗證moduleEntity是否可以正常調用函數
console.log(moduleEntity.setArgs);
//驗證通過,此方法可以使用
moduleEntity.setArgs(4,2);
moduleEntity.add();
moduleEntity.mult();

 

不過,這個寫法也可以稍加改動,匯出時代碼改為:

[javascript]
module.exports = calc;//直接把calc匯出到module 

module.exports = calc;//直接把calc匯出到module調用方法修改成如下:


[javascript]
var Calculator=require("./module"); 
calculator=new Calculator(); 
calculator.setArgs(7,3); 
calculator.add(); 

var Calculator=require("./module");
calculator=new Calculator();
calculator.setArgs(7,3);
calculator.add();個人感覺二者都一樣,就是稍微少了那麼一點代碼。
模組介面的唯一變化是使用 module.exports = calc代替了 exports.calculator=calc。在外部參考該模組時,其介面對象就是要輸出的 calc對象本身,而不是原先的exports。事實上,exports 本身僅僅是一個普通的Null 物件,即 {},它專門用來聲明介面,本質上是通過它為模組閉包的內部建立了一個有限的提供者。因為它沒有任何特殊的地方,所以可以用其他東西來代替,譬如我們上面例子中的calculator 對象。
注意:不可以通過對 exports 直接賦值代替對 module.exports 賦值。exports 實際上只是一個和 module.exports 指向同一個對象的變數,它本身會在模組執行結束後釋放,但 module 不會,因此只能通過指定module.exports 來改變提供者。

 

/*以上內容參考Node.js開發指南一書*/

/*以上所有代碼都是通過webstorm來開發的*/

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.