小白學習node.js的心得

NO IMAGE
2012年2月6日
學習Node.js的目的,主要是為了瞭解Web技術,以便順應近些年以及未來可能持續幾十年的網際網路熱潮,以備不時之需。說來慚愧,已經成了CS Master了,對於Web開發還是小白的水準。
很久以前(我不知道具體時間,姑且就這麼說吧),網頁都是靜態的。使用者通過瀏覽器請求指定的頁面(通過輸入網址或者點選已有的頁面上的超連結)來獲得靜態的頁面。靜態,不僅是說沒有可以滿頁亂動的圖片,發光的文字等等,更重要的意思是說網頁的內容是固定的,儲存在伺服器上的,不可定製(例如,不可能將每一個訪問者的姓名顯示在訪問者請求的頁面上)。後來有了動態網頁,圖片可以動了,文字可以閃光了,網頁內容變得可定製了,程式可以在瀏覽器後面跑了,例如最簡單的例子,瀏覽器後臺的程式可以動態地檢查你在註冊某一個賬戶時候輸入的兩個密碼是否一致。
這是怎麼做到的呢?一方面,對於網頁的生成,本質上就是生成html文字。那麼顯而易見,一定要有一個程式,接受相應的引數,來生成這樣的文字。這樣的程式過去用perl和CGI搭配著寫,現在呢,可以用PHP,JSP,ASP,等等等,以及Node.js這樣的指令碼語言去寫。當然這些語言的功能絕不僅僅是生成html文字,還包括對資料庫的訪問,對檔案的讀寫,甚至他們本身就可以構建一個HTTP伺服器,像Node.js。
要構建一個網站,需要開發許多頁面。在MVC架構下,通常是開發頁面模板,然後再利用模板引擎,結合相關的頁面資料,生成最終的html頁面。使用者對頁面的請求封裝在由瀏覽器傳送至伺服器的http資料包裡,請求的方法有GET,POST,DELETE等。我們開發的伺服器程式,必須根據請求中所包含的資源生成(或直接提取現有)的html頁面返回給客戶端,這一過程叫做路由控制。一個瀏覽器傳送的請求的例子是:http://www.renren.com/login。那麼伺服器程式中就必須對’/login’這一訪問請求進行處理,例如新增處理函式等。
今天遇到的問題是:在呼叫req.flash()方法試圖在網頁上顯示訊息時,有異常丟擲’req.flash() requires sessions’。
2014年2月9日
坑啊,上一篇提到的’req.flash() requires sessions’問題,上網查了下資料,居然說“把app.use(app.router);放到session之前就會undefined,之後就好了”,我一試,還真是的!原文連結
另外那天遇到的,ejs不能使用layout.ejs的問題,解決方法是:要在工程目錄下的package.json檔案中新增”express-partials”: “*”;
也就是說要安裝express-partials這個依賴項。當然,也許以後的ejs版本就不需要這樣,或者又有了新的方法,但是我現在不care了。PS:目前我用的ejs的版本是2.5.8。
2014年2月11日
至此,完成了利用node.js對一個極其簡單的微博系統的“開發”(- -! 幾乎是照著書上的程式碼複製的)。然而起到的作用是符合預期的:對網站的構建有了系統化,全域性地認識。更加理解了“前端”與“後端”的概念,區別,聯絡。理解了伺服器和瀏覽器如何互動地工作,共同為使用者服務。
所謂前端,就是直接與使用者打交道的網頁和其上的所有元素,例如,表單,動畫,資料,等等。決定在一張網頁上顯示什麼,怎麼顯示,要不要動畫,設計動畫,是前端工程師的事;伺服器接收到客戶端發來的請求,是否要與資料庫互動,怎麼互動,存還是取,有沒有資料需要運算的,怎麼運算,要不要與其他的網路終端通訊,以及最終返回給使用者什麼樣的資訊,什麼樣的頁面,等等一系列網頁“之後”的動作,都是後端工程師的問題。兩者的區別和功能劃分是大體明確的,但又互相耦合。後端工程師不可能完全不懂前端,否則例如簡單的使用者註冊的事情都處理不了的(這件事需要用到前端提供的一個表單,後端必須處理這個表單)。當然這樣的聯絡僅僅是要求後端或者前端工程師,稍微瞭解彼此,以至於能夠在設計後端程式或者前端頁面時能面向統一的目標,可行的解決方案,最終構建成功的網站。
總的來說,構建一個網站是容易的:首先,明確並且精確地描述需求(相當相當重要);然後,根據需求設計網站地圖,即有哪些頁面,頁面之間的路由關係;再然後,編寫後臺程式;最後是測試和釋出。
但構建一個可靠的網站是極其困難的。什麼是可靠的網站?即,面臨極大的流量不會故障或故障率很低或能夠自我修復從而不至於服務終止,響應時間快,伺服器消耗低。上述都是從後臺的角度考慮,從前臺的話,無非就是,好看,操作簡便,結構清晰,等等。以上這些,才真正是無數Web開發者為之日夜操勞的問題。解決這些問題,歸根結底還是解決演算法和資料結構的問題(也許前端不是這樣的)。因此,如果立志投身Web開發,開發的方法和技術必須知道,同時也必須要有紮實的演算法和資料結構基礎,以及紮實的計算機理論和工程的基本功,才能構建出可靠的網站。