王者歸來:Node.js 學習課程 1之6 – Node.js 簡介

Node.js 初階學習

目錄:

什麼是 Node.js?

  • 他是個主機端的的開發程式,他是用 google chrome 的 Javascript V8 引擎所架構出來。
  • 他使用 V8 來解釋和執行 JavaScript 程式碼。
  • 它允許在後端(脫離瀏覽器環境)運行 JavaScript 程式碼。
  • 非同步的來執行程式(non-blocking)
  • 還有許多有用的模組,它們可以簡化很多重復的製作
    => npm 程式庫!

 

誰使用 node.js?

  • Netflix
  • Amazon
  • Paypal
  • Adobe
  • LinkedIn
  • Uber
  • Medium
  • eBay
    source: monster.com & Quora

 

Node.js 適合的場景

  • 什麼應用系統適合使用Node.js?
  • 即時性很高的 web app, 如聊天室或協同工作的工具網站
    e.g. google excel
  • Server API, 可以處理很多 request
  • 需要長連線的服務
  • 需要很多  CPU ,如圖案處理 —> 不合適

 

安裝 node.js 和 npm

*** 記得必須用 root

curl --silent --location https://rpm.nodesource.com/setup_8.x | bash -
yum install nodes

 

npm 是什麼?

 

npm 基本指令 –  全域安裝 global install

$ npm install 套件名稱 -g      // # 範例

 

npm 基本指令 –  專案型安裝

$ cd /path/to/the/project
$ npm install <package name>

# 範例

$ npm install express

# 現在就可以在你自己的專案裡來使用 express 這個套件了.

<!-- app.js -->
var express = require( 'express' );

 

npm 移除全域套件

$ npm uninstall <package name> -g

# 範例

$ npm uninstall express -g

 

移除專案裡的套件

$ cd /path/to/the/project
$ npm uninstall 

# 範例

$ npm uninstall express

現在看一下你們的 packages.json 檔案,你們移除的套件都不見了

列出全域套件


$ npm ls -g       // 列出全域套件.
$ npm ls -gl      // 列出全域套件詳細資訊.


 

第一個專案 class1- blocking code 範例

mkdir class1
cd class1
npm init
nano index.js   // 可以用自己喜歡的編輯器,如 vim

編輯內容

// index.js  [ synchrounous example ]
console.log('hello world');
var fs= require("fs");
var data = fs.readFileSync('content.txt');
console.log(data.toString());
console.log("End");

儲存後回到 bash 看看你們執行的結果

node index.js

你們會看到 “End” 顯示在最後面,就像我們以往一般寫程式一樣: c++, C#, PHP, java

非同步執行(non-blocking)

nano index2.js

編輯內容

// aynchrounous example
var fs = require("fs");
fs.readFile('content.txt', function(err, data) {
    if (err) return console.error(err);
    console.log( data.toString() );
});
console.log("Game over");

Output:

Game over
I love node.js !
But I love to write app as well.

發生了什麼事???

Callback 概念

Callback 到底是什麼呢? 
當一個函式執行完畢後所執行的那個函式就是所謂的 callback 函式

什麼?!我聽不太懂。。。。。。你這是哪招?

Callback 範例

var request = require('request');

function job1() {
    request('http://www.eztravel.com.tw', function( error, response, body) {
        console.log('job 1 done');
       // console.log(body);
    })
}

function job2() {
    console.log('job 2 done');
}

job1();
job2();

第 2 個工作先顯示完成 ~!

包含在裡面的 function 的子程式是另外被找出時間執行。
大部分的核心模組都是用這種Callback方式編寫

 

 

練習時間 Practice time

Q1: 把原本的範例故意打錯一個字,看會發生什麼事?

Q2: 製作一個callback 的範例
使用 fs.readFile 在完成讀取後使用 callback 顯示讀取的檔案內容
在讀取前顯示 “start reading a file”
在程式最後一行顯示 “end of the file”

解答

const fs = require('fs')
 
console.log('start reading a file...')
 
fs.readFile('file.md', 'utf-8', function (err, content) {  
  if (err) {
    console.log('error happened during reading the file')
    return console.log(err)
  }
 
  console.log(content)
})
console.log('end of the file')  

 

架構: 優於 PHP 的地方

 

課程完畢,輕鬆一下吧~!

 

如轉載請標明來源!

One thought on “王者歸來:Node.js 學習課程 1之6 – Node.js 簡介”

Leave a Reply

Your email address will not be published. Required fields are marked *