沒有後端語言基礎的前端工程師如何正確的學習nodejs?
感覺學的過於坎坷,不得不提問了。
一開始看的書是 nodejs入門的,教如何搭建一個簡單的博客,用的是express,可是那本書講的是2.0版本的,現在express都4.0了,滿地的坑,實踐了一天後,網上各種找解決方案,最後還是不得而終。接下來群里人經驗告訴我不要用express,直接用thinkjs,又去讀它的文檔,對沒有後端經驗的閱讀者來說很不友善。讀到模塊/資料庫章節,發現demo要操作資料庫。看不懂,無奈又去學習了下MySQL的基礎,回來後發現還是看不懂,讓php同事一看說相當於用js寫thinkphp…於是thinkjs也卡這裡了,現在就會搭建一個伺服器,配置路由的跳轉和使用非阻塞的理念調用傳遞req對象,想進一步學習卻找不到入口了,網上下來的demo也是各種不會用…累覺不愛啊,難道要我先學php紮實下基礎嗎=_=
開始不要去看那些框架,就像你不懂js的語法直接學習jquery是什麼感覺,知其然而不知所以然,並且對jquery的把握也停留在表面不能深入和精準的理解,只知道如何使用。框架是在充分了解一個語言之後做出的封裝和模式的總結,減少重複,使用經過驗證的抽象和方法。
所以學習node.js先了解node.js本身。推薦看它的官方文檔,了解它的API,尤其是它的測試用例應該是覆蓋了API的使用模式。運行了解官方的例子。作為一個伺服器,要把握住一個核心的東西就是接受請求和發送請求,也就是request和response,其它都可以放放。等你了解了,node.js是如何接收請求的,數據是如何傳遞過來的, 如何拿到這些數據的,那麼如何處理就是具體需求對待了。接下來,了解了如何回復請求的,那麼如何生成你要的數據,如何吧這些數據發送出去。不就完成了一個伺服器的基本功能了。其他的用到的時候自然就查查就了解了。先分享點最新的經驗:學東西主要還是堅持,做事情主要還是計劃,最終靠的是執行力或毅力。
最後給點建議:nodejs或php,其實看你手中掌握的資源,什麼叫資源。就是有沒有認識相關的朋友,同事。有問題的時候能夠很好的求教他。如果沒有那就建議nodejs,他現在畢竟是工程化的代名詞,但還是有個前提,如果是前端,建議還是把js弄清楚了,東一槍西一棒,最後啥也撈不著。分享一下以前寫的文章,湊合看吧,僅供參考:
當看到這個問題之前,我也碰到過很多有同樣疑惑的同學,他們都有一個共同的疑問該學php還是nodejs,如果學nodejs該如何學習,包括我自己也曾有過同樣的經歷。幸運的是,通過我內心的掙扎和對當前市場供需關係以及行業發展前景的綜合衡量評估後,我還是在接觸了java, php之後回到js這片天空上來了。一方面是客觀因素,一方面是興趣導致的,前端太好玩了,值得為此奉獻一點激情或青春。其實這也是一個開發者成長必須經歷的一個洗禮,一個磨難,一個挑戰,他是一個必然的過程。很多人不差智商,不輸情商,四肢健全,就是學不好一門語言。我認為最主要還是敗在了堅持,專註上面了。經受不住內心私慾或其它語言的誘惑,都一一敗下陣來。缺少的就是:堅持專註。業界堅持專註代表: @司徒正美, @張鑫旭 。司徒大牛 600篇js文章,是歲月、歷史和勢力的見證。張同學42頁博文也是伴隨著我們的不斷成長。然後說了解後台語言,到底要了解到什麼程度呢?
其實說後台語言,就個人看其實他包括兩類語言,一個叫操作資料庫的語言,比如java,php,nodejs,ruby,python,c#等等。一個叫資料庫操作語言,比如sql,包括基本的insert,update,select,delete四個動作。所有的頁面的一切數據交互都基於這四個操作。從我個人的經歷推薦兩本書:php與mysql程序設計,第四版,細說php,第二版。這兩本都是比較全面的介紹了php,包含了php基本概念與mysql的知識,但都比較淺顯,入門而已。到現在你會發現,其實從前端的角度出發,語言有兩種,客戶端服務端,服務端又是資料庫或非資料庫。然後就有方向了,學了js,學任何一門操作資料庫的語言(後台語言),資料庫操作語言,然後就可以自由組合搭配。而且語言之間有很大的相似性,都可以無縫的跨界。區別的是語言開發的所依賴平台,比如c#依賴於.net,php經常與apache,mysql結合,java依賴於jdk等等的。開發工具也各有不同,比如vs,phpstorm、zendstudio, intellij idea, eclipse等等。但他們的api卻很像似,粗暴點說,你抄我我抄你,你中有我,我中有你。從前端的角度出發我推薦2門語言:php,nodejs。想照顧一些老的東西,維護一些老項目,就選php。展望新方向工程化操作比較多就nodejs。這兩個語言各有所長,只是nodejs從語法上來說跟js是無縫的,但它也有缺點,一上手可能不能真正的區分客戶端或服務端之後的差別。php的oop跟接近於java的純oop風格。但這2個從操作sql的方面來說,有很大的相似性。按照這個結論下來,無論選nodejs,php都可以,可以從主觀上判斷,你更喜歡那個。或者做一個小的留言板,看看那個更符合你的思維習慣。一般的瓶頸就是你得少,建議多寫,用解決實際問題的經驗來跨越語言造成的障礙。以下是我學習php的一些歷程,分享一下,僅供參考:
1. 留言板,2, blog3. 企業站,4. 商城5. 新聞綜合站。基礎的入門之後,就是框架了,從我個人淺顯的了解當中,分享一下經驗,大概市面上有這幾個框架:1. ci 經典的輕巧框架,在全球的使用量比較靠前,入門比較簡單。2. thinkphp,國內人用的比較多,是國人開發,現在勢頭真猛,比ci封裝的更好,也更傻瓜。3. yii,這個是目前全球排名第一的框架,但是入門曲線稍高。4. zend frame這是有php組織開發的框架,文檔比較規範,也比較重,適合構建大型項目。
5. laravel 這是一個呼聲比較好的一個新型框架,借鑒了Symphony,各方面比較優秀,博眾家之所長,但是相對中文資料比較少。等這些了解了,估計已經入門了,學習應該找到具體的方向了。另外兄弟連的視頻教程,質量一般,勝在量多,從基礎到框架,應有僅有,最主要是免費。然後回歸正題,只是建議你了解,點到為止,了解是為了把前端乾的更好。那什麼時候真正的深入學習?建議在學好js的前提之下,吃透js。
比如了解js的作用域,閉包,原型,繼承,尤其是作用域與面向對象是js的特色也是與任何一門後台語言比較容易混淆的兩個地方。請向各個業界js大牛看起,不一定非要那麼深的深度,但一定達到自己力所能及的高度。比如有個自己的框架,如司徒正美avlon,比如有一個自己寫的小框架,如玉伯的seajs等等。另外我個人的經驗:學什麼語言不重要,重要的是趨勢你學語言的動力,說白了真正的需求興趣來自那些。我認為興趣有兩方面。一方面是內在主動型的。比如js學習到一定的程序,寫了很多demo或想法需要用更個性化的方式來呈現,這時候需要建一個個人網站或博客來管理你的內容。這時候才選擇語言,了解需求產生,開發,發布上線的流程,對你以後的前端工作也是有幫助的。另外一個是外在被動型的,比如同學,家鄉的朋友,需要你幫忙做一個企業網站,小的電商網站來做為他們初期企業文化願景宣傳的一個互聯網通道,這時候就是一個外在的需求。拿我個人經驗來說,我的php經驗完全是來自於一次接私單的經歷。雖然那次私單以失敗而告終,但我在一個月的業餘時間裡邊徹底的了解了php的開發方式,語言特徵,後來根據這個基礎我成功的開發上線了另外一個朋友的個人網站:靜靜設計 - 一個用心創造設計改變生活的女設計師的個人博客網站,這個網站的開發心得一直想寫,但機會不湊巧,只能說敬請期待。明確一個自己感興趣的目標之後,在選擇語言,以興趣引導語言,學習才有動力。比如做網站,那可能就是php,nodejs,做個簡單的blog,在實踐中慢慢了解語言,在學習中慢慢成長。 nodejs或php都有各自的應用場景,要麼選一個公司現在用的,要麼選擇一個適合自己思維的。
如果你學會了其中的一個,然後在去了解其它的,可以說,入門會很快,因為裡邊有很多相同的東西。
最後總結一下我個人的心得:每個人都有好奇之心,這對做技術的來說並不是什麼壞事,正因為這顆好奇之心,不斷的帶領向前邁進。另外了解一下滿足一下好奇心沒什麼不好。就如同我當時學習php一樣,感覺學習之後有多牛B,真正的學習後做了一個網站出來之後發現,確實收穫不少,對前端也有幫助。但是js的水平還是在原地,除了擅長使用jquery之外,並沒有太多的擅長。人的精力是有限的,能力是有限的,在有限的精力裡邊把一件事情做好就已經很不錯了。
再總結:可能有點急躁了,還是有個計劃,需要慢慢的進行。
另外,nodejs之前先把js學好,知識與編程能力真的是兩個概念。 最後實在找不到方向,就加個群:492107297,禁止閑聊,非喜勿進。蟹妖,完全沒有基礎的話,建議先學一門web語言,比如PHP(我是認真的)。不用學深,也不要學框架,會做個能寫能看能刪能改的博客就行了,不要花功夫做界面,土鱉的就行,最好有資料庫,沒有的話寫文件里也湊合了。然後再回來看express什麼的不過如是嘛……
正經地說, 雖然我一直在黑 PHP, 但作為後端快速入門的語言來講, 也是可以的. (前提是撬不動 NodeJS.)
不過我還是以學習 NodeJS 為目標說說看.
首先, 需要了解 HTTP 請求的本質, 如果你 AJAX 很熟了, 並且經常在調試的時候查看請求的相關數據, 那麼關於 HTTP 請求也就算是略知一二了. (這一塊兒上我覺得至少應該要明白 HTTP 請求的結構, Header 和 Content, 以及一些重要概念在裡面的實現, 比如 Cookie, Content-Type 等.)
前端 JS 入門的話, 不建議你用庫, 但是 NodeJS 入門的話, 還是上 express 吧. 因為 NodeJS 提供的 API 太輕量級了, 徒增入門難度. (當然, 入門之後可以進一步深入.)
資料庫的話, 如果覺得 MySQL 用不順手, 可以試試 MongoDB (NoSQL). 同類據說還有個好用的叫 RethinkDB, 不過我還沒上手用過, 因為暫時沒有 Windows 版本.學第一門後端且JS不熟練的情況下不要選擇node.js,ROR、Flask什麼的都會讓世界很美好。
不是說node不好,只是node對初學者不友好。
就醬。別看那種書...用什麼就去它的官網看教程與文檔比如express, 去看它的官網常式分分鐘就OK了, 你身邊的人的建議也不靠譜, 他們只是拿自己熟悉的東西讓你用罷了, 潛台詞就是:"你問的我也不懂, 要不你用這個我懂的, 我就可以教你了"233333
NodeSchool 這裡的課程非常循序漸進。已經知道的就在看一遍,不知道的就捋著慢慢看,做練習。
我現在理解的 Nodejs 應用大概有兩個方向:
- 網路框架 : Express / Koa / ThinkJs 很多很多
- 工具:npm / webpack / Gulp 等等都是基於 Node 的
但是你根本不用慌。
先說框架這部分,因為之前有PHP基礎,我看待這些框架的感覺就是和PHP是一樣一樣的,無非就是路由、模板、操作資料庫等等。這裡贊同 @Jim Liu ,如果有 後端基礎的話,你會很快就明白這是怎麼回事。
再說工具這一部分,在 Node 出現之前,也有很多工具讓我們用。想想Gulp壓縮合併文件,任何一個能夠讀取文件的語言都能夠做。對吧,不過Node的出現讓我們前端有了可以用自己的"語言"去開發自己的工具的能力。
說來說去,都是老瓶裝新酒。我是安裝了webstorm,用webstorm創建一個新項目,選Node.js Express App
然後下一步下一步,最後會生成一個搭建好的nodejs express項目。項目目錄啊,路由配置js啊,都生成好了。一上來就是可以跑的。然後從根目錄的app.js開始看,弄懂每行都是幹什麼。
然後你再自己在routes文件夾寫一個新文件,在app.js里把路由配置上去。比如訪問/hello,返回一個"world"字元串。有兩種返回方式,一個是send直接返回字元串。另外是render,會把views文件夾下的模板變成html返回。views文件夾下放的是模板文件。public文件夾下,放的是靜態html和資源。基本上就是把app.js搞懂,每個文件夾是幹什麼的搞懂。
express項目結構和ruby on rails很像。可能很大程度上參考了ror吧。我是一個寫java的。我女朋友是沒有後端經驗的前端。我帶她入門了nodejs。沒有jsp或php等後端的開發經歷,學了也用不好
可以試著用WildDog,這樣即使你不會後端,Mysql,mongodb也一樣可以開發出APP出來。如果一開始上來學這麼多東西,會累死的。
推薦閱讀:
※我的jq里 .hover 無效 ?
※2015年前端開發技術棧及開發工具?
※瀏覽器載入網頁時的過程是什麼?
※移動前端開發和 Web 前端開發的區別是什麼?
※是js的載入阻塞了頁面的渲染還是js的執行阻塞了頁面的渲染?