這周的nodejs學習內容為幾個依賴包的使用,把書上的例子都敲了一遍。這篇就以例程為線索,復習一下一周的工作。
1.connect
這個例程主要是使用connect依賴包,connect提供一個中間件(由函數組成,與請求、響應對象交互)的功能。書中也介紹了connect內置其他的中間件,這些中間件起到組織代碼完成web功能的作用。
2.session
使用connect進行用戶會話,進行基本的登錄系統。通過中間件實現了檢查登錄、展示表單、用戶匹配、處理登出的功能。展示了中間件的強大和組織方式。
3.express-tweet
這章學習了用express包,express基於connect。程序設計依舊簡單,不過版本不同的np中,函數名會產生一些變化,比如express.createServer()在3.0後就變成了express()。使用express最大的益處就是它簡潔又不失靈活。不過tweet訪問不到,而改寫成微博時,weibo的API訪問又過於復雜,這個程序其實是沒有成功跑起來的。
4.echo
這兩個例程使用的是WebSocket包,echo的功能主要就是記錄消息傳輸的時間。Websocket的調戲方式就ws來監聽(on)一個事件,在回調函數中進行處理,在html文件中也要使用js進行消息的交互。
5.cursors
本例學習到了廣播,這個功能通過自己寫的一個broadcast函數來進行處理。在確保光標元素是否存在時,是通過DOM的ID查找來完成的。
6.chat
這一章可以說是這本書的重頭戲,因為Socket.IO包就是作者開發的。它與WS的不同在與它的消息傳遞是基於傳輸而不全是WS。這個例程時先實現聊天功能,再實現廣播歌曲(DJ)功能。過程中也沒有遇到什麼大問題。一個流程就是socket.emit一個事件,另一端socket就監聽到這個事件,並對其進行處理。
7.總結
這周效率還是蠻不錯的,遇到的問題依然放在了evernote上。問題以前也出現過就是localhost與127.0.0.1的區別。這周在調試js過程中習得了一個函數,可以讓js想php一樣dump一個對象來。現在貼在下面分享。
代碼如下:
function dump(arr,level) {
var dumped_text = "";
if(!level) level = 0;
//The padding given at the beginning of the line.
var level_padding = "";
for(var j=0;j<level+1;j++) level_padding += " ";
if(typeof(arr) == 'object') { //Array/Hashes/Objects
for(var item in arr) {
var value = arr[item];
if(typeof(value) == 'object') { //If it is an array,
dumped_text += level_padding + "'" + item + "' ...\n";
dumped_text += dump(value,level+1);
} else {
dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
}
}
} else { //Stings/Chars/Numbers etc.
dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
}
return dumped_text;
}
下一周開始學mongoDB,node的學習主要還是通過學習例程、閱讀源碼API來提高。畢竟node的優點就是網絡上大片的np。