Node.js 教學

Node.js 教學 - 文章列表

設計規範

透過設計規範在一定程度上約束 Node.js 開發者,使其於團隊中撰寫出可讀性高且易維護的程式碼。

資料處理

透過 underscore.js 套件進行文章中字元數的計算,主要以 MapReduce 的概念進行實作。
透過 brain 套件進行類神經網路的機器學習,根據使用者的看劇行為資料進行性別的分類。

檔案處理

透過 fast-csv 套件進行 CSV 檔案讀取與寫入的基本操作。
透過 jsonfile 套件進行 JSON 檔案讀取與寫入的基本操作。
透過 crawler 套件進行網頁檔案的多層分析,取出需要的資訊。

API 處理

透過 express 套件實作出最基本的 API 。
透過 express 套件進行 API 參數傳遞。
透過 koa 套件快速建立 API。

資料庫處理

透過 mysql 套件進行 MySQL 資料庫的基本操作。
透過 mongodb 套件進行 MongoDB 資料庫的基本操作。

快取處理

透過 memcached 套件進行快取讀取與寫入的基本操作。
透過 redis 套件進行快取讀取與寫入的基本操作。

例外處理

透過 Node.js 進行例外處理。

測試處理

透過 mocha 套件進行 Node.js 程式碼的單元測試。
透過 supertest 套件進行 Node.js API 的規格測試。
透過 loadtest 套件進行 Node.js API 的負載測試。

佈建處理

透過 Ubuntu 作業系統安裝 Node.js。
透過 forever 套件佈建 Node.js 伺服器,當發生異常終止和檔案變更時就會自動重新啟動。
透過 pm2 套件佈建 Node.js 伺服器,在重新開機時自動啟動伺服器。

即時處理

透過 sails 套件快速建立即時處理的 API。
透過 sails 套件自動產生搭配資料庫基本操作的即時處理 API 。

機器處理

透過 selenium-webdriver 套件進行瀏覽器機器人操作。

自動處理

透過 fixmyjs 套件根據 JSHint 自動修復程式碼。
透過 yeoman 套件統整專案開發流程,減少重複的工作專注在於專案的架構與設計。
透過 strongloop 套件快速建立 API,同時產生管理平台。

模組處理

透過 Node.js 進行模組使用和定義。

記錄處理

透過 log4js 套件實作出每日的 API 存取記錄檔。

協調處理

透過 async 套件在多個非同步事件處理進行協調。(以基本資料處理為例。)
透過 co 套件在多個非同步事件處理進行協調。(以取得劇集資訊為例。)

加密處理

透過 crypto 套件進行資訊驗證。

推播處理

透過 apn 套件進行 iOS 的推播服務的通知。
透過 node-gcm 套件進行 Android 的推播服務的通知。
透過 nodemailer 套件進行信件寄送的通知。

圖表處理

透過 c3.js 套件實作圖表,呈現不同類型 App 產品的每天活躍使用者資訊。
透過 chart.js 套件實作圖表,比較 App 產品的本週與上週活躍使用者資訊。
透過 highcharts 套件實作圖表,呈現看劇的男生和女生比例資訊。
透過 charted 開源碼專案實作自動產生圖表網站服務,呈現廣告投放成效基本資訊。
透過 polymer 開源碼專案之 google chart 套件呈現 iOS App 使用分析的比例圖表。
透過 plotly.js 套件產生與管理線上圖表,呈現不同類型 App 產品的每天活躍使用者資訊。
透過 ECharts 套件實作圖表,呈現不同類型 App 產品的每天活躍使用者資訊。

廣告處理

透過 co-request 套件存取 Facebook 的 Reporting API 取得當日廣告版位相關資訊。
透過 co-request 套件存取 App Annie 的 Data API 取得當日廣告版位相關資訊。

同步處理

透過 co-express 套件同步存取 App Store 的 RSS Feed Generator 的 API 匯整任何 App 的排名資訊。
透過 memcached 套件撰寫即時同步計數 API 伺服器,主要存取 Memcached 分散式伺服器。

網站應用

透過 passport 套件進行身份認證的網站應用。
透過 hexo 套件建立部落格的網站應用。

排序處理

透過 Node.js 實作資料結構與演算法中的氣泡排序法。
透過 Node.js 實作資料結構與演算法中的插入排序法。
透過 Node.js 實作資料結構與演算法中的希爾排序法。

圖的處理

透過 Node.js 實作深度優先搜尋找出圖元件中所有節點。
透過 Node.js 實作廣度優先搜尋找出圖元件中所有節點。

函數處理

透過 Node.js 實作 Higher Order Function 的應用,提供每秒執行重複事項的函式,總共 N 次。
透過 Node.js 實作 Map 、 Filter 和 Reduce 函式的應用,找出所有活動票價中小於 1000 元的最高票價。

前端處理

透過 Node.js 實作 API ,並且與前端 Angularjs 框架進行資料處理。
透過 Node.js 實作 API ,並且與前端 Angularjs 框架進行表單處理。

雲端部署

透過 IBM Bluemix 進行 Node.js 應用程式的雲端部署。
透過 AWS Elastic Beanstalk 進行 Node.js 應用程式的雲端部署。
透過 MEAN development stack on Google Compute Engine 進行 Node.js 應用程式的雲端部署。

雲端服務 - Parse

透過 Node.js 實作 RESTful API 主要能夠彈性存取 Parse 雲端服務的資料庫。

雲端服務 - IBM

透過 Node.js 分析文章所代表的使用者輪廓,並且產生分析 API (IBM Watson 雲端服務)。
透過 Node.js 分析文章所使用的語言,並且產生分析 API (IBM Watson 雲端服務)。

雲端服務 - Google

透過 Node.js 進行 Google BigQuery 資料的查詢應用。
透過 Node.js 進行 Google BigQuery 資料的新增應用。
透過 Node.js 進行 Google BigQuery 資料的轉換應用。
透過 Node.js 進行 Google BigQuery 資料的進階查詢應用。
透過 Node.js 進行 Google BigQuery 資料的讀取匯入應用。

雲端服務 - Amazon

透過 Node.js 進行 Amazon DynamoDB 傳入和取出 JSON 格式的記錄。
透過 Node.js 進行 Amazon S3 上傳與下載 JSON 格式的檔案。
透過 Node.js 進行 Amazon SQS 上傳與下載 JSON 格式的檔案。
透過 Node.js 進行 Amazon Kinesis 傳入和取出 JSON 格式的記錄。
透過 Node.js 搭配 Amazon Elastic MapReduce 建立簡易的推薦 API 應用。
透過 Node.js 搭配 Amazon S3 雲端服務建立上傳圖片檔案的應用。

Node.js 雲端服務 - Parse (1)

基本介紹

教學目標

透過 Node.js 實作 RESTful API 主要能夠彈性存取 Parse 雲端服務的資料庫。

前置作業

  1. 申請 Parse 雲端服務帳號。
  2. 在 Core Data 服務中建立資料類別。

套件安裝

1
$ npm install parse --save

使用教學

實作重點

  1. 溝通介面: API 針對 Parse 雲端服務中的 Document 資料類別進行 CRUD 操作。
  2. 需求彈性: API 參數可以針對資料庫 Schema 直接進行彈性調整。
  3. 資料管理: Parse 雲端服務已經提供資料管理的平台,可以輕易透過網站進行資料的管理。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
var express = require('express'); 
var body_parser = require('body-parser');
var app = express();

app.use(body_parser.json());
app.use(body_parser.urlencoded({ extended: true }));

var router = express.Router();

var Parse = require('parse').Parse;

Parse.initialize("Application ID", "JavaScript Key");

app.use('/api/v1', router);

router.get('/document', function(req, res){
var query = new Parse.Query("Document");
query.find({
success: function(document) {
var datas = [];
for (var i = 0; i < document.length; ++i) {
datas.push(document[i]);
}
res.json(datas);
}
});
});

router.post('/document', function(req, res){
var Document = Parse.Object.extend("Document");
var document = new Document();
var keys = Object.keys(req.body);
for (var n=0; n<keys.length; n++) {
document.set(keys[n],req.body[keys[n]]);
}
document.save(null, {
success: function(document) {
res.json(document)
},
error: function(document, error) {
console.log(error)
}
});
});

router.delete('/document', function(req, res){
var query = new Parse.Query("Document");
query.equalTo("objectId",req.body.objectId);
query.first({
success: function(document) {
document.destroy();
res.json(document);
},
error: function(document, error) {
console.log(error)
}
});
});

router.put('/document', function(req, res){
var query = new Parse.Query("Document");
query.equalTo("objectId",req.body.objectId);
query.first({
success: function(document) {
var keys = Object.keys(req.body);
for (var k=0; k<keys.length; k++) {
if (keys[k]!="objectId") {
document.set(keys[k],req.body[keys[k]]);
}
}
document.save();
res.json(document);
},
error: function(document, error) {
console.log(error)
}
});
});

var port = process.env.PORT || 8080;
app.listen(port);

相關資源

Node.js 同步處理 (2)

基本介紹

教學目標

透過 memcached 套件實作即時同步計數 API,透過 Apache Benchmark 工具進行驗證。

前置作業

  1. 完成 Node.js 套件安裝與設置。
  2. 啟動 Memcached 伺服器。
  3. 安裝 ApacheBench 工具。

套件安裝

1
$ npm install memcached --save

使用教學

透過 memcached 套件撰寫即時同步計數 API 伺服器,主要存取 Memcached 分散式伺服器。

server.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var Memcached = require('memcached');
var memcached = new Memcached('localhost:11211');
var express = require('express');
var app = express();

var lifetime = 86400000;

app.get('/api/v1/count', function(req, res){
var key = req.query.key;
memcached.incr(key, 1, function (err) {});
memcached.get(key, function (err, data) {
if (!data) {
memcached.set(key, 0, lifetime, function (err) {});
} else {
console.log(data);
res.json({value: data})
}
});
});

app.listen(8080);

執行 即時同步計數 API 伺服器。

1
$ node server.js

透過 Apache Benchmark 工具進行驗證。

1
$ ab -n 100000 -c 100 http://localhost:8080/api/v1/count?key=impression

相關資源

Node.js 同步處理 (1)

基本介紹

教學目標

透過 co-express 套件同步存取 App Store 的 RSS Feed Generator 的 API 匯整任何 App 的排名資訊。

前置作業

  1. 完成 Node.js 套件安裝與設置。

套件安裝

1
2
3
$ npm install co --save
$ npm install co-request --save
$ npm install co-express --save

使用教學

首先透過 RSS Feed Generator 取得適合的資料 API,接著撰寫資料轉換程式,最後產生 API。

appstore_rank_report.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
var co = require('co');
var request = require('co-request');
var wrap = require('co-express');

var express = require('express');

app = express();

var app_product = [];
app_product['Messenger'] = {};
app_product['Messenger'].name = 'Messenger';

app.get('/api/v1/appstore/rank', wrap(function* (req, res) {
co(function* () {
var keys = Object.keys(app_product);
var result = yield request('https://itunes.apple.com/tw/rss/topfreeapplications/limit=200/json');
var data = JSON.parse(result.body).feed.entry;
for (var n=0; n<data.length; n++) {
for (var i=0; i<keys.length; i++) {
console.log(data[n]['im:name']['label']);
if (data[n]['im:name']['label'] == keys[i]) {
app_product[keys[i]].rank = n + 1;
}
}
}
var datas = []
for (var n=0; n<keys.length; k++) {
datas[n] = app_product[keys[n]];
}
res.json(datas);
});
}));

app.listen(8080);

執行程式

1
$  node --harmony appstore_rank_report.js

在瀏覽器網址列輸入 http://localhost:8080/api/v1/appstore/rank ,就能取得相關 App 的排名資訊。

相關資源

Node.js 函式處理 (2)

基本介紹

教學目標

透過 Node.js 實作 Map 、 Filter 和 Reduce 函式的應用,找出所有活動票價中小於 1000 元的最高票價。

前置作業

  1. 完成 Node.js 套件安裝與設置。

使用教學

撰寫程式

function.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
var prices = {
"活動 A": 1500,
"活動 B": 1200,
"活動 C": 950,
"活動 D": 600,
"活動 E": 300
};

var tickits = ["活動 A","活動 B","活動 D","活動 E"];

console.log("資料提供");
console.log(tickits);
console.log("=>");

var tickitPrices = tickits.map(function(name) {
return prices[name];
});

console.log("資料對應");
console.log(tickitPrices);
console.log("=>");

var filterTickitPrices = tickitPrices.filter(function(price){
return price < 1000;
});

console.log("資料篩選");
console.log(filterTickitPrices);
console.log("=>");

var maxFilterTickitPrices = filterTickitPrices.reduce(function(a, b){
if (a > b) {
return a;
} else {
return b;
}
});

console.log("資料減化");
console.log(maxFilterTickitPrices);

執行程式

1
$ node function.js

執行結果

1
2
3
4
5
6
7
8
9
10
11
資料提供
[ '活動 A', '活動 C', '活動 D', '活動 E' ]
=>
資料對應
[ 1500, 950, 600, 300 ]
=>
資料篩選
[ 950, 600, 300 ]
=>
資料減化
950

相關資源