iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 2
1
Modern Web

30天使用Node.js在AWS上開發後端系列 第 2

30-2 Node.js環境安裝, 基本語法與有趣應用

由於我剛剛寫的洋洋灑灑兩千多字的學習心得與介紹因為重新整理消失了
非常想棄賽QQ
但是還是先把重點寫一下好了

這一系列的文章都是想要寫給非相關科系的人看的
所以不會講很多很底層, 歷史的東西
我希望從應用開始慢慢介紹 Node.js
我依然還記得我大一剛接觸程式的時候, 連 for 迴圈都不會寫
也不知道學了物件, 多型, pass by reference到底能幹嘛
直到我自學網頁後才開始發現, 原來可以用的地方很多
只是學校的教法, 讓許多人卻步, 希望我的文章能引起想入門的人興趣
有興趣之後, 再來學最快!

環境安裝

Mac

  • 先安裝 homebrew
  • 之後打開你的 terminal.app, 輸入 brew install node@6
  • 這時候 npm, 也就是 Node.js 的套件管理系統也會一起被裝起來
  • 之後推薦使用 n 來做版本切換
    • 雖然很多人推薦 nvm, 但是在跑某些shellscript的時候會有問題, 不過還很久才會遇到!
  • sudo npm install -g n
    • 參數g是讓這台電腦的所有人都可以使用這個套件
  • n 7.10.1
    • 推薦使用 Node.js@7.10.1
    • 因為7.6開始支援很酷的語法 async/await, 後面會再介紹!

Ubuntu

  • curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
    • 這系列文章使用 v7.10.1, 因為 v7.6 開始支援 async/await, 之後會說明
  • sudo apt-get install -y nodejs
  • sudo apt-get install -y build-essential
    • 推薦一定要裝 build-essential, 以後會有用!

基本語法 (明天再補更多常用的介紹)

宣告變數

變數的宣告有比較常見的幾種: var, let, const
var 是最一般宣告變數的方式, let 可以視為跟 var 很像
差異是在被用 let 宣告的變數比較不會污染到其他變數
看不懂? 沒關係! 以後慢慢才會有感覺 XD
至於 const (Constant), 就是宣告一個變數為常數
常數就是這個數字是不可被改變得, ex: PI = 3.1415
被宣告成 const 的變數, 是無法被修改的!
想知道更詳細請參考底下網址 這裡

陣列

var a = [];      // 宣告陣列a
a.push(1);       // 將1塞到陣列a的屁股後面, a => [1]
a.push(2);       // 將2塞到陣列a的屁股後面, a => [1,2]
a.push(3);       // 將3塞到陣列a的屁股後面, a => [1,2,3]
var b = a.pop(); // b => 3, a => [1,2]

Node.js 大部分的語法都跟 Javascript 一樣, 關於陣列這塊, 在開發肯定會很常遇到
陣列你可以想像成把一堆機車放在一個一個的機車格, 每個格子上都有編號
可以方便你去使用跟管理!

陣列裡面可以不用裝同型態的東西, ex: [1, "2", {name:3}]
但是通常開發的時候都會盡量放一樣的型態
就像把會員資料放到陣列裡面, 丟到網頁上去顯示
或著是管理機車格內的機車這樣

基本上在開發時, 陣列內通常都會裝一堆 物件
例如

var users = [{
  _id: 1,
  name: "Neil1",
  age: 2
}, {
  _id: 2,
  name: "Neil2",
  age: 3
}];
var length = users.length; // users這個陣列內有2個元素, 可以用.length取得裡面有幾個元素

其實我這裡談得很粗淺, 如果真的想要的理解更多的, 可以參考這裡
很多常用的例如 ``` shift, sort, slice, splice, map, forEach ````

物件

var user = {};
user.name = 'Neil';    // { name: 'Neil' }
user.age = 18;         // { name: 'Neil', age: 18 }
user['l-name']='Wang'; // { name: 'Neil', age: 18, 'l-name': 'Wang' }
user.age++;            // { name: 'Neil', age: 19, 'l-name': 'Wang' }

https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Guide/Working_with_Objects

有趣應用

其實以前我在接觸程式的時候, 常常不知道學這些東西到底能怎樣應用在生活上
學了變數宣告, 記憶體位置, 物件參考等等, 我都不知道能幹嗎
所以我其實很能體會為甚麼有些人討厭寫程式, 因為一開始的學校教育
真的很難從其中獲得成就感! 所以真心推薦用 Node.js
使用別人建立好的輪子, 快速建立一個小東西! 先有興趣, 學起來就快!
這裡使用facebook-chat-api
先在桌面建立一個目錄 day1
然後進到該目錄底下, 建立一個 test.js 的檔案
使用編輯器去編輯 test.js
推薦使用vscode, 至於怎麼使用就不多說了!
或是使用 terminal.app

cd ~/Desktop
mkdir day1
cd day1
vi test.js

建立好檔案後, 先用 terminal.app 在 day1 目錄底下輸入

  1. npm init
  2. 狂按 enter
  3. npm install facebook-chat-api
  4. 把以下程式碼貼到 test.js 中
  5. 在 terminal.app 中輸入 node test.js
const login = require("facebook-chat-api"); // require 就是引入安裝的套件來使用
 
// 建立一個簡單的回應機器人,對方說什麼, 你就回應什麼
login({email: "你的臉書帳號", password: "你的臉書密碼"}, (err, api) => {
    if(err) return console.error(err);
 
    api.listen((err, message) => {
        // 回應對方訊息
        // message.body => 對方傳過來的文字
        // api.sendMessage是傳送訊息給對方的功能
        api.sendMessage(message.body, message.threadID);
    });
});

然後找別人密你, 然後就可以看到你就像鸚鵡一樣
他說什麼你就說什麼回應給他
我個人覺得這是一個可以快速引起興趣的小程式
做了馬上就有一個 feedback
有沒有覺得 Node.js 比起 Java, C, ..etc 其他程式語言來說更簡單好玩XD?


上一篇
30-1 為何我選擇Node.js?
下一篇
30-3 使用Node.js開發一個類似Instagram的後台吧(架構篇)
系列文
30天使用Node.js在AWS上開發後端6
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
逮丸逮丸
iT邦大師 1 級 ‧ 2017-12-07 08:20:27

只知nvm,不知道有n。

雖然很多人推薦 nvm, 但是在跑某些shellscript的時候會有問題, 不過還很久才會遇到!

請問這是指怎樣的問題?

neilwang iT邦新手 5 級 ‧ 2017-12-07 10:12:15 檢舉

n 是 TJ大神開發的
假如說你有在主機要跑 crontab 的話
有某些情況 nvm 會造成路徑上的問題
除非一次要跑多個版本的script
否則我是不建議使用 nvm

我要留言

立即登入留言