Sails.js

2014Q4 工作心得 (3)

評估和導入前端應用的新技術和工具,今年初我們開始導入 Node.js 和 AngularJS 進行 Single Page Application 開發,就能解決大部份公司所面臨的問題,可是當專案越來越大,此時 AngularJS 效能和維護就會是大問題,因此我開始嘗試找解決的方案,React.js 單向資料流相較於 AngularJS 雙向資料綁定,資料處理架構更加明暸簡單,此外 React.js 的 Virtual DOM 更讓效能相關於 AngularJS 有明顯的差別,此外 React.js 搭配 jQuery 套件從無到有實際開發出呈現資料表格的網站,意外的非常簡單易懂,所以目前已經有部份專案的部份元件已經開始採用 React.js 進行開發。

調整和升級後端伺服器的應用,今年中我們開始導入 Sails.js 和 MongoDB 進行資料即時儲存的管理,像是推播通知系統如何儲存使用者的 Device Token 和 Register ID ,可是當資料量越來越大時,存取效能和穩定運作就會開始產生問題,因此我開始嘗試找解決的方案,Google BigQuery 提供的串流資料和 SQL 查詢就能解決資料即時儲存的管理,但是並非所有需求皆能解決,像是推播排程需要 CRUD 的功能,此時 MongoDB 就比 Google BigQuery 更適合,可是當需求為直接即時新增使用者資料,接著透過 Google BigQuery 在適當的時機透過 SQL 查詢篩選出符合條件的使用者資料,此時 Google BigQuery 就比 MongoDB 更適合,所以目前已經有部份專案依據需求的適切性開始轉移 Google BigQuery 進行管理。

最後資料呈現的方式,目前主要是透過 Google Docs 排程取得 Amazon RDS 、 MongoDB 、 Google BigQuery 和 Google Analytics 的資料進行整合產生業務專用的數據表格,下一步針對圖表的需求,要能讓業務根據樣本資料拉出需要的圖表,同時又能讓工程師直接實作出被需要的圖表,因此我開始嘗試找解決的方案,Plotly 是個圖表呈現的線上服務,除了能讓業務根據樣本資料拉出需要的圖表,又能讓工程師直接實作出被需要的圖表,並且搭配 Node.js 就能與 Google BigQuery 進行自動化的整合,此外業務要如何存取 Google BigQuery 的資料呢? IPython Notebook 是個筆記本的網站服務,能夠以筆記本的方式描述資料如何存取,以及透過 Python 指令直接直接執行程式碼存取 Google BigQuery 的資料,以及進行基本的資料分析與統計應用,所以目前已經開始在規劃 Plotly 和 IPython Notebook 詳細的整合應用標準操作流程 (Standard Operating Procedure, SOP)。

Node.js 即時處理 (2)

教學目標

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

前置作業

  1. 完成 Node.js 套件安裝與設置。
  2. 完成 MongoDB 和 MySQL 兩種資料庫安裝與設置。
  3. 在資料庫中建立 user 資料表,其中包括數值型態 id 欄位和字串型態 name 欄位。

套件安裝

1
2
3
$ npm install sails --save
$ npm install sails-mongo --save
$ npm install sails-mysql --save

使用教學

建立專案

1
$ sails new appProject

建立使用者的 RESTful API。

1
2
$ cd appProject
$ sails generate model user

設定資料庫 - MongoDB

Adapter

1
2
$ cd appProject/config
$ vi adapters.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
module.exports.adapters = {
mongo: {
module : 'sails-mongo',
host : '伺服器位址',
port : 27017,
user : '使用者名稱',
password : '使用者密碼',
database : '資料庫名稱'
},
disk: {
module: 'sails-disk'
},
'default': 'disk',
}

Model

1
2
$ cd api/models
$ vi User.js
1
2
3
4
5
6
7
8
9
10
11
module.exports = {
adapter: 'mongo',
attributes: {
id: {
type: 'integer'
},
name: {
type: 'string'
}
}
};

設定資料庫 - MySQL

Adapter

1
2
$ cd appProject/config
$ vi adapters.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
module.exports.adapters = {
mysql: {
module : 'sails-mysql',
host : '伺服器位址',
port : 3306,
user : '使用者名稱',
password : '使用者密碼',
database : '資料庫名稱'
},
disk: {
module: 'sails-disk'
},
'default': 'disk'
}

Model

1
2
$ cd api/models
$ vi User.js
1
2
3
4
5
6
7
8
9
10
11
module.exports = {
adapter: 'mysql',
attributes: {
id: {
type: 'integer'
},
name: {
type: 'string'
}
}
};

啟動專案

1
2
$ cd appProject
$ sails lift

在瀏覽器網址列輸入 http://localhost:1337/user ,就能開始使用所建立好的使用者 RESTful API 同步存取資料庫中的資訊。

相關資源

Node.js 即時處理 (1)

基本介紹

教學目標

透過 sails 套件快速建立即時處理的 API。

前置作業

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

套件安裝

1
$ npm install sails -g

使用教學

建立專案。

1
$ sails new appProject

建立使用者的 REST API。

1
2
$ cd appProject
$ sails generate model user

啟動專案。

1
2
$ cd appProject
$ sails lift

在瀏覽器網址列輸入 http://localhost:1337/user ,就能開始使用所建立好的使用者 RESTful API 。

相關資源