2015年7月10日 星期五

[Node.js]Node.js 入門介紹

從安裝到可以開始學習摸索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機制確保程式的執行順序

沒有留言:

張貼留言