2016年1月17日 星期日

NodeJs - express routing & Ajax參數傳遞

一. Ajax 參數傳遞
我用Psuedo code整理了GET/POST/PUT/DELETE三種方法,包含從jade檔表單欄位的設置->AJAX如何發送->Node Js Server如何接收資料,有什麼問題再回覆給我吧

二.Routing
目前在練習一個簡單的部落格網站(萬年教材),其中很容易發生重複的routing,ex "/:account/profile" 、 "/:account/articles"....,account是用來向DB索取資料的依據,所以反覆地重複DB.find(account),這時候可以用 router.param("account")方式一次性處理

2016年1月9日 星期六

Chartist JS - 使用心得與教學分享-製作Pie Chart

最近想要弄個資料視覺化的網站,開始碰JS,覺得這門語言太有趣了XD

前提結束,那就來看看Chartist Js可以做什麼吧!這裏有大量範例介紹
Chartist Js 透過Svg繪製,最大特點是所有的元素都會繪製到DOM,所以要對各個label、line、path操作就十分的容易。
我整理了最近學習的心得:製作一個Pie Chart
1.自訂class name -> css輕鬆配色
2.slice的event listener 
3.checkbox動態操作pie chart
4.動態產生Label
完成圖:

*入坑注意,仔細一看Chartist.js還在0.X版,所以很多資料與Bug還在修,當初沒注意到就跳進來,很多問題都要到github發issue,好在開發者回覆都很快,如果要求不多,還是考慮較為成熟的chart js吧 (慘痛經驗OTZ
*chart.js用canvas繪製,chartist.js用svg,兩者差異頗大,可以參考連結資料Canvas vs Svg,私心認為chart.js預設的顏色與排版都比較美,相對chartist.js自由度較高、容易客製
 

2016年1月1日 星期五

NodeJs - Async 用法(集合類)

NodeJs最為人知的便是non-blocking call, 但是有時候會需要混用同步與分同步的機制
像是要從Database撈資料在回應網頁,這時候就需要等所有Query返回結束才能response
此時最好的做法是 用非同步的方式發出Query,等所有Query結束才能response

NodeJs有個處理流程的模組-Async ,這篇記錄一下使用的方法與心得,可以到我的github查看範例程式 或是點擊各個子標題

集合類

-each(array, function(item, callback){}, function(err){}) : 
輪詢陣列的資料,執行順序async,發生error時會直接中斷


-forEachOf(array, function(value, key, callback){}, function(err){}) : 
跟each用法差不多,只是iterator function可以多拿到index和value

-map(array, function(item, callback){}, function(err, results){}) : 
使用起來跟each很像,最大差別在於map會產生一個新的陣列儲存結果,執行順序async,但是陣列結果跟array index順序一致

-filter (array, function(item,callback){}, function(results){}) : 
results一樣會按照array的次序, iterator function會回傳真偽,results只儲存為true的值,OS:不處理error

-reject
和filter相反,results只儲存為假的值

-reduce(arr, memo, function(memo, item, callback){}, function(err, result){}):
執行順序 sync,memo設定初始值,iterator function會依照運算合併memo與item,最後回傳一個result,適用於需要將array的item合併

-reduceRight:
與reduce操作方法相同,只是執行array順序顛倒

-detect (array, function(item,callback){}, function(result){}) :
和filter雷同,不過detect只接受第一個回傳true的值,執行順序是async,不保證array的順序

- sortBy (array, function(item,callback){}, callback(err, results){}) :
 執行順序Async,iterator  function用來運算值且回傳,最後的results會依照運算值大小排列原array item

-some (array, function(item,callback){}, function(result){}) : 
 執行順序Async,只要有一個iterator function會回傳true,result就是true

-every (array, function(item,callback){}, function(result){}) : 
 執行順序Async,所有中間的function會回傳true,result才是true

-concat (array, function(item,callback){}, function(results){}) : 
執行順序Async,iterator function可以回傳array,results會async儲存iterator function傳回來的array

心得:使用時要注意,有時候result是儲存iterator function回傳值,有些是依照iterator function回傳值排序原array item。