從2016年在yelp hackathon裡第一次接觸node.js以及其相關的stack(MEAN),我就被深深吸引了。當初的印象是,這開發web app好快啊,一分鐘配置埠,搭好伺服器,跑起來hello world node.js。我的第一個nodejs app是聊天室+地圖,用到socket.io,這也重新整理了我的三觀,同時也讓我對async印象深刻。
後來又參加了shop.com的hackathon,不用說,就用nodejs。這次啊,造了個輪子,不都說造輪子比較高大上麼。給shop.com原有的api做了個nodejs版本的。這次照著node-yelp的葫蘆,畫了個自己瓢,還接觸到了Promise。不光是造輪子,還得測試啊,所以又接觸了assert。雖然沒太多人用,不過也是挺有成就感,畢竟為community做了貢獻。
過了幾個月快畢業了,這一次是給XXX安全公司做專案(在試用python stack失敗後,我強烈建議轉到node stack),是給一個mobile app做server。因為專案特定的需求,除了接觸到node中restful api的設計與實現,還搞了不少安全相關的東西。畢竟是畢業專案,而且是真的會有XXX公司的人用,再加上上一次node專案屎一樣檔案結構的經驗,這次我做了些研究,關於檔案結構,ngnix的配置還有一些best practice。這次專案的印象是,這開發web app好方便啊,一分鐘(一般要試用幾個類似的package,看看哪個比較適合)在npm找到你想用的package,安裝讀文件,然後就用!
自此我從沒讀過任何nodejs書籍,全靠online tutorial,documents以及照葫蘆畫瓢做東西(stackoverflow就用不用說了)。東西還是照樣做,感覺讀個啥書。
畢業了找到工作之後,又想開始浪(用閒置時間做專案)。毫無疑問的選擇了node,不考慮應用場景, 就是單純的為了通過做東西學更多nodejs的東西。這次主要做了爬蟲,接觸到了cheerio,request以及另外重新整理三觀的auth0。這東西好啊,媽媽再也不用擔心登陸註冊、使用者管理了。由於這段時間做了和找工作相關的專案,然後發現glassdoor只有一個package,為了蹭熱點,我也搞了一個,就是要比那一個好!然後還做了一個獲取公司h1b資訊的package,方便我再專案裡呼叫。
這期間搞到了《深入淺出nodejs》還有《nodejs高階程式設計》,準備開始讀,大概翻了翻,覺得這我都『差不多』知道啊,於是就拖拖拉拉大概看了看。
浪了沒幾個星期,去了tufts的一個hackathon,這次更是收穫滿滿,因為是24小時hackathon,之後還要presentation,所以為了加快開發速度,把更多時間放到真正功能的開發上。我發現了另一個神器,hackathon-starter。在這個樣板的幫助下,完成了hackathon,但他的作用不止於此。我發現他的檔案結構可以和我之前搜到的best practice結合,這樣我就有了一套自己順手的檔案結構,感覺棒棒的。之後的專案就可以輕輕鬆鬆開始。除了hackathon-starter,還結識了『加油女孩』微光基金專案的成員。他們到hackathon裡面去找中國人,然後看有沒有興趣幫他們開發。我心想,反正也沒事兒,而且這是個公益活動(頭一次覺得自己寫的程式碼這麼有社會意義),最主要我還是可以用nodejs,就這樣決定了。之後的四五個月時間(主要是頭兩個月集中開發,後面屬於針對某些需求的改動再做的一些邊邊角角的開發),就基本下班回家搞這個。這一次專案更大了(前所未有的大),從設計到實現,從客戶端到管理員端,從model分析設計到怎麼保證資料的安全,從專案開發到不同環境(dev, qa, production)的部署。印象比較深的幾個package是helmet,lusca(安全相關),i18n(國際化),async(收穫最大的一個,功能複雜之後,callback一層套一層,真的是callhack hell了),在一個就是發現handlebar這個前端引擎既有的功能很少,於是接觸了怎麼自定義一些操作,讓引擎更加強大,伺服器放方面接觸了forever和pm2,感覺pm2相對好一點,之後還要部署https,搞了成千上萬次,後來在certbot的幫助下完成了(後來想起來貌似cloudflare可以幫助自動變成https)。
忙完這個公益專案之後,就現在了,雖然還是在做東西,還是用nodejs。有一個想法越來越頻繁的出現在我腦海裡,對於nodejs我到底是在學什麼,是學習具體的package怎麼用嗎?!都說看原始碼,理解怎麼工作的,這個真的有用嗎?是在什麼方面有用呢?
帶著這些疑問,我決定認認真真的看一下課程,讀一下書,從原理讀起。之前我的學習方法是learning by doing,現在開始從原理學起。也用親身經歷來驗證下(極端的)實踐派學習方法以及(符合學習方法的)理論派學習方法,到底會給我帶來什麼不同的收穫!(接下來會持續更新…)
上面提到的package/repo/project:
- socket.io: socket.io/
- node-yelp: github.com/olalonde/no…
- node-shop.com: www.npmjs.com/package/nod…
- cheerio: www.npmjs.com/package/che…
- hackathon-starter: github.com/sahat/hacka…
- auth0: auth0.com/
- node-glassdoor: www.npmjs.com/package/nod…
- node-h1bvisa: www.npmjs.com/package/nod…
- lusca: www.npmjs.com/package/lus…
- helmet: www.npmjs.com/package/hel…
- async: www.npmjs.com/package/asy…
- pm2: www.npmjs.com/package/pm2
- forever: www.npmjs.com/package/for…
- i18n: www.npmjs.com/package/i18…
- certbot: certbot.eff.org/
- assert: www.npmjs.com/package/ass…