從安裝到可以開始學習摸索Node.js也一段時間了,也好不容易終於破完入門關卡。
喔耶!!終於破台了,讓我炫耀一下,嘿嘿~
經過這一段時間的練習,自行腦補了關於Node.js的設計模式,在下面做個紀錄與分享。
Node.js的設計採用了模組化的設計模式,在npm中也存放了許多他人開發的模組(套件)可以拿來應用。
而Node.js遵循了CommonJS的規範,利用了require以及exports來讓檔案與模組之間溝通。
以下是一個簡單的範例,當使用者啟動程式時,先顯示歡迎的資訊,接著提問使用者是否要讀取個人資料
,若回答y則讀取個人資料顯示於畫面上,若否則感謝使用者的訪問並結束程式。
首先建立一個start.js檔案,程式碼如下:
var welcome = require('./welcome'); var profile = require('./profile'); welcome.welcome(); welcome.ask(function(answer){ switch(answer){ case "y": profile.print(); break; case "n": console.log("You don't want to read profile, thanks for your visit"); break; } });
接著建立welcome.js,程式碼如下:
var readline = require('readline'); module.exports = { welcome: function(){ console.log("Welcome"); }, ask: function(callback){ var rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.question("Do you want to read your profile?(y/n)", function(answer) { callback(answer); rl.close(); }); } }
再來是profile.js,程式碼如下:
var name = "Howard"; var sex = "male"; var age = "always 18"; var hobby = "Play basketball"; var idols = "Stephen Curry"; exports.print = function(){ console.log("Name: "+name); console.log("sex: "+sex); console.log("age: "+age); console.log("hobby: "+hobby); console.log("idols: "+idols); }
將這三個檔案放在同一個資料夾中,並執行程式的進入點start.js來執行程式。
在這個程式中welcome.js以及profile.js即為兩個套件,我們在start.js利用require來加入這兩個套件到程式中,通常習慣會將接取套件的變數取名與套件名稱相同,若require的套件非官方所提供,則參數要給予相對路徑。
在兩個套件中,利用exports做為出口,設定套件可以對外存取的方法或變數。
在welcome.js中利用module.exports來設定welcome以及ask兩個對外的方法。
而在profile.js則是很單純的利用exports來設定單一的對外print方法來顯示個人資訊。
至於module.exports與exports兩者的差別可以參考以下連結:
JavaScript執行方法時雖然會按照呼叫方法的先後順序循序的執行,當兩個方法之中,前面的方法有使用到例如SetTimeout等會延後執行的語法,這種狀況下可能會先出現後面方法的結果,這時候就可以利用callback的機制,將後面的方法傳入,在執行第一個方法完成後在呼叫下一個方法,以下是一個簡單的範例。
沒有使用callback方法
function first(){ setTimeout( function(){ console.log('I am first'); }, 1000 ); } function second(){ console.log('I am second'); } first(); second();
使用callback方法
function first(callback){ setTimeout(function(){ console.log('I am first'); callback(); }, 1000 ); } function second(){ console.log('I am second'); } first(second);
從上面的例子可以理解,使用callback機制可以確保程式執行的順序,所以在某些狀況下,為了確保JavaScript的執行順序就必須使用到這樣的機制來撰寫。
結語
玩了一陣子的Node.js了,除了還需要了解各個套件的用法外,
從基本的練習範例中整理出Node.js常見到的東西如下:
1.利用require套入官方預設或第三方開發的套件。
2.利用exports來設計自己的套件可以對外的變數或方法
3.善用callback機制確保程式的執行順序
沒有留言:
張貼留言