Node.js – 模組 (Module)

Loading

測試環境為 CentOS 8 x86_64

把常用的功能寫在一起成為一個模組 (Module) ,模組的回傳值可以是 屬性 (變數 properties) ,函式(函數 Function)或是物件 Object(同時有多個屬性或是函式),以下來看看.

Node.JS 所需套件須透過 npm 來下載,所以必須安裝 npm (Node Package Manager) 套件.

[root@localhost ~]# yum install -y nodejs
[root@localhost ~]# yum install -y npm

檢視一下 Node.JS 與 npm 版本.

[root@localhost ~]# node -v
v10.23.1
[root@localhost ~]# npm -v
6.14.10

範例參考 – https://ithelp.ithome.com.tw/articles/10185083

屬性 (變數 properties)

編輯模組,回傳值為屬性 (變數).

[root@localhost ~]# vi PMessage.js
module.exports.SimpleMessage = 'Hello world';

程式說明:
exports 是一個物件,可以給它 屬性,函式或是物件,如果該模組程式要給其他模組(程式)來使用時必須透過這個.

主程式.

[root@localhost ~]# vi PMessageApp.js
var msg = require('./Messages.js');
console.log(msg.SimpleMessage);

程式說明:

  • 透過 require 去載入模組.並把得到的 屬性 (變數) 儲存到變數 msg.
  • 透過 console.log 把 msg 內容顯示在標準輸出.

執行結果

[root@localhost ~]# node PMessageApp.js
Hello world
{ SimpleMessage: 'Hello world' }

函式(函數 Function)

編輯模組,回傳值為函式(函數).

[root@localhost ~]# vi mLog.js
module.exports.log = function (msg) {
    console.log(msg);
};

程式說明:
exports 是一個物件,可以給它 屬性,函式或是物件,如果該模組程式要給其他模組(程式)來使用時必須透過這個.
這邊定義成一個函式,並透過 console.log 把 msg 內容顯示在標準輸出.

主程式.

[root@localhost ~]# vi mLogApp.js
var msg = require('./mLog.js');
msg.log('Hello World');

程式說明:

  • 透過 require 去載入模組.並把得到的 函式(函數) 儲存到變數 msg.
  • 透過 msg.log 把 ‘Hello World’ 傳到函式.

執行結果

[root@localhost ~]# node mLogApp.js 
Hello World

匿名函式

編輯模組,回傳值為匿名函式.

[root@localhost ~]# vi anonyMsg.js
module.exports = function (msg) {
    console.log(msg);
};

程式說明:
跟前面函式(函數)模組的差別就在沒有函式名稱 ( module.exports.log ).

module.exports.log = function (msg) {
    console.log(msg);
};

上面語法也可以寫成 Arrow Function Expression 的方式.

module.exports = (msg) => {
    console.log(msg);
};

主程式.

[root@localhost ~]# vi anonyMsgApp.js
var msg = require('./anonyMsg.js');
msg('Hello World');

程式說明:
跟前面的差別就在沒有使用函式名稱 ( msg.log ).

var msg = require('./mLog.js');
msg.log('Hello World');

執行結果

[root@localhost ~]# node anonyMsgApp.js
Hello World

類別化函式

編輯模組,回傳值為類別化函式,類似類別 Class 一樣.

[root@localhost ~]# vi Person.js
module.exports = function (firstName, lastName) {
    this.firstName = firstName;
    this.lastName = lastName;
    this.fullName = function () {
        return this.firstName + ' ' + this.lastName;
    }
}

程式說明:

  • 類似定義一個類別 Class.
  • 其中的 this 代表目前程式碼的物件.

主程式.

[root@localhost ~]# vi PersonApp.js
var person = require('./Person.js');
var person1 = new person('James', 'Bond');  
console.log(person1.fullName());

程式說明:

  • 透過 require 去載入模組.並把得到的類別 Class 儲存到變數 person.
  • 因為是類別 Class .須透過 new 產生類別 Class 並儲存到變數 person1.
  • new 產生類別 Class 時,已經指定好 firstName 與 lastName,接下來去呼叫 fullName 函數.

執行結果

[root@localhost ~]# node PersonApp.js
James Bond

物件 Object(同時有多個屬性或是函式)

編輯模組,回傳值為物件.

[root@localhost ~]# vi data.js
module.exports = {
    firstName: 'James',
    lastName: 'Bond'
}

程式說明:

  • exports 是一個物件,可以給它 屬性,函式或是物件,如果該模組程式要給其他模組(程式)來使用時必須透過這個.
  • 這邊定義成一個物件,裡面有兩個屬性 firstName 與 lastName.

主程式.

[root@localhost ~]# vi dataApp.js
var person = require('./data.js');
console.log(person.firstName + ' ' + person.lastName);

程式說明:

  • 透過 require 去載入模組.並把得到的物件儲存到變數 person.
  • 透過 變數 person 把 物件 firstName 與 lastName 兩個屬性透過 console.log 把內容顯示在標準輸出.

執行結果

[root@localhost ~]# node dataApp.js 
James Bond
沒有解決問題,試試搜尋本站其他內容

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料