《Node.js實戰》學習筆記
《Node.js實戰》學習筆記
學習Node的起因是Bluemix在內部測試,但我對各種Web框架都不太熟悉,感覺Node比較熱門,就買了這本書打算看。
Day 0:萬事開頭難
雖然買了書,卻一直找不到看書的契機,直到在Startup News上面看到有人釋出了某網站的洩露資訊連結,於是有了做一個查詢密碼洩露資訊網站的想法。
Talk is cheap,我們得來一個說做就做專案。首先從Bluemix新建一個Node.js應用,把程式碼下載到本地,發現用的是Express,然後發現這本書的第8章講的是這個框架,於是直接從第8章開始啃。
連蒙帶猜,一天時間居然就把功能實現了,其實頁面只有一個輸入框和一個提交按鈕,後臺我把資料一次全都讀到記憶體,連資料庫也沒有。雖然還談不上入門,但感覺有了學習的興趣,所以決定從頭看一遍這本書。
Day 1:玩物不喪志
另一個契機是最近剛買了一個機械鍵盤,愛不釋手,但平時的使用量真是少啊,所以前面幾章我都是手工輸入程式碼的。執行到第49頁的程式碼時發現一處錯誤:
client.on('connect', function() {
channel.emit('join', id, client);
});
需要改為如下方可執行:
channel.emit('join', id, client);
當時猜想是因為這個client的‘connect’事件在走到這行程式碼前就發生了,所以這個事件在這裡不可能捕捉到。不過現在看來也許是因為Node版本變化太快的原因吧。不過我在網上搜到一處Github上的程式碼,這個地方也是這樣改的,相信他也遇到了同樣的問題。還有人說把event改成‘connection’,但未能解決問題。
Day 2:他山之石
第四章開始講RESTful Web服務了,我的理解就是用GET,POST,PUT和DELETE來進行CRUD操作。更詳細的解釋可以參考下面的連結,包括一些設計的常見誤區。
為了測試RESTful,這裡需要一個cURL工具,我下載了一個Windows上的cURL。
各個HTTP謂詞的命令分別為:
POST: curl -d “item1” http://localhost:3000
GET: curl http://localhost3000
DELETE: curl -X DELETE http://localhost:3000/1
PUT: curl -X PUT http://localhost:3000/1?item2
最近聽說了一些關於Node.js的負面評價,有人還搞出了fibjs,能更好地支援序列程式設計。不過我還是想先熟悉一下Node.js,另外還打算研究一下網路爬蟲,並用Node.js實現一個。感覺這個東西用並行更好一點吧。
Day3 懸而未決
看到第5章:儲存Node程式中的資料。
這一章主要講和資料庫的互動,當然也可以寫檔案來持久化。因為最近裝了MySQL,所以實踐了一下5.2.1節的內容。
遇到了一個問題,從資料庫中取出Date型別的資料後,顯示的資料很長,如“Tue Mar 13 2012 00:00:00 GMT+0800 (中國標準時間)”,而書上的示例顯示的是“2012-03-13”。而查詢資料庫的時候,顯示是簡略版的。估計是和資料庫的介面格式問題,暫時不深入研究了。
mysql> select * from work;
+----+-------+------------+----------+-------------+
| id | hours | date | archived | description |
+----+-------+------------+----------+-------------+
| 5 | 6.00 | 2012-03-13 | 0 | a |
| 7 | 6.00 | 2012-03-13 | 0 | b |
+----+-------+------------+----------+-------------+
2 rows in set (0.00 sec)
由於PostgreSQL外掛對Windows的支援可能不好,另外也沒有安裝這個資料庫,5.2.2節略過。另外NoSQL也沒有接觸過,簡單瞭解一下目前有Redis、MongoDB、Mongoose這些NoSQL。
Day 4 這世界變化快
第6章開始講Connect框架及其中介軟體的使用。但是Connect的中介軟體已經發生了變化,所以第7章的內容已經有點過時,那些中介軟體都獨立了,不再屬於Connect。比如原來的connect.cookieParser已經變成了cookie-parser。可以用下面的方法安裝
npm install cookie-parser
另外在Windows下的curl命令,Cookie是用分號分隔的,而不是書上的逗號。例如:
curl http://localhost:3000/ -H "Cookie: foo=bar; bar=baz"
測試簽名cookie的時候,遇到了問題,伺服器不能解析簽名的cookie,試了SHA-1,SHA-256,MD5等方式的簽名,都沒有辦法通過伺服器的驗證。後果就是後面的章節也沒心情看了,第七章簡單瀏覽了一下,順手還提了一個勘誤。不知道如果顯示地安裝老版本的connect,書上的程式碼能不能執行。
Day 5 虎頭蛇尾
看第8章Express的時候問題更多了,主要是因為Node變化太快了。
有些問題找到了解決方法,比如8.1.2節在生成框架的時候,首先需要安裝一下express-generator
npm install -g express-generator
等生成了框架,模板裡面的內容變化也很大,而且執行的方式也不同。書上寫的是執行"node app.js",但現在的框架需要執行的是:
node ./bin/www
第8章被卡住問題是8.4.2節的bodyParser和multipart中介軟體不工作,因為這個中介軟體可能也移出了express。記得曾經解決了這個問題,可惜沒有記錄下來,先不研究了。
前面資料庫章節略掉的NoSQL在這一章算補上了,下載了一個Windows下的MongoDB,只要一個命令就啟動了,比較傻瓜。
後續的章節就大體瀏覽了一下,這本書就算看完了吧。
總結
這就是我讀這本書的過程,前後不到一個月,因為從我部落格上的時間來看,是從2015年1月3日開始,到21日為止。可以看出看書的時候遇到了各種問題,有些容易解決,有些真的力不從心。感覺看書不容易啊,還需要這麼多契機,比如雲主機、密碼洩露、機械鍵盤,然後還會遇到各種困難。
雖然有點虎頭蛇尾,但這也跟Node的版本更新太快有關,有些例子實在不能用了。另外就是需要的知識太多,比如前端有EJS,Jade等模板,後端各種MySQL,PostgreSQL,MongoDB,Redis。
總體上說這本書不錯,但是Node還在變化中,相關書籍可能過時得比較快,出版社再版重印的時候需要考慮一下這個問題了。
相關文章
- Node.js學習筆記Node.js筆記
- DDD實戰課(實戰篇)--學習筆記筆記
- Node.js學習筆記(一)Node.js筆記
- Node.js學習筆記1Node.js筆記
- <node.js學習筆記(2)>Node.js筆記
- <node.js學習筆記(1)>Node.js筆記
- 《Netty實戰》-學習筆記1Netty筆記
- go實戰web入門學習筆記GoWeb筆記
- dubbo學習筆記---dubbo開發實戰筆記
- 電商大資料學習筆記:實戰大資料筆記
- Node.js學習筆記----day04Node.js筆記
- Node.js stream(流) 學習筆記(一)Node.js筆記
- webpack 學習筆記:實戰之 babel 編碼Web筆記Babel
- <node.js學習筆記(3)>url,fs,qs,cryptoNode.js筆記
- <node.js學習筆記(4)>stream和http模組Node.js筆記HTTP
- 2017-05-02 框架實戰 學習筆記框架筆記
- <node.js學習筆記(6)>koa-router,模組化Node.js筆記
- JavaScript學習筆記(四十八)——Node.js之ExpressJavaScript筆記Node.jsExpress
- Python學習筆記——爬蟲之Scrapy專案實戰Python筆記爬蟲
- 實戰架構 API 伺服器 學習筆記 (1)序言架構API伺服器筆記
- numpy的學習筆記\pandas學習筆記筆記
- 《MySQL實戰45講》學習筆記4——MySQL中InnoDB的索引MySql筆記索引
- springcloud微服務實戰 學習筆記四 分散式配置中心SpringGCCloud微服務筆記分散式
- Node.js 學習筆記_20170924(持續更新…)Node.js筆記
- [學習筆記]在不同專案中切換Node.js版本筆記Node.js
- swift學習筆記《5》- 實用Swift筆記
- ThreadLoop實踐學習筆記threadOOP筆記
- Node.js學習日記7Node.js
- <node.js學習筆記(5)>koa框架和簡單爬蟲練習Node.js筆記框架爬蟲
- (五)numpy知識學習2-python資料分析與機器學習實戰(學習筆記)Python機器學習筆記
- IT學習筆記筆記
- 學習筆記筆記
- 《Python3 網路爬蟲開發實戰》—學習筆記Python爬蟲筆記
- kubernetes學習筆記 (三):阿里雲遊戲業務實戰筆記阿里遊戲
- springcloud微服務實戰 學習筆記二 服務提供者SpringGCCloud微服務筆記
- springcloud微服務實戰 學習筆記三 服務消費者SpringGCCloud微服務筆記
- springcloud微服務實戰 學習筆記六 服務閘道器SpringGCCloud微服務筆記
- Node.js 設計模式 學習筆記 之 流程式設計Node.js設計模式筆記程式設計