怎樣有效地學習 Node.js?

要學相關的哪些東西, 哪些可靠資料, 怎樣的順序 ?

還有比較關心有沒有整體梳理 node 各種工具如何一起協同運作的博客和文檔 ?


這個回答已經是三年前了,可能沒那麼準確了,我會找個時間來更新一下。

Node.js 之 log4js 完全講解 - 前端外刊評論 - 知乎專欄

老的回答

-------------------------------------------------------------------------------------------------------------

NodeJs現在處於發展階段,相關資料和書籍不是很多。說開了NodeJs只是JavaScript作為CommonJS的實現,使得JavaScript在伺服器端有了用武之地,所以NodeJs從語法層面來說還是JavaScript。但是與客戶端的JavaScript又有所區別。注意以下幾點:

  • 要學習NodeJs,必須有一定的JavaScript基礎,理解事件模型,了解JavaScript的語法和特性,理解JavaScript面向對象編程
  • 學習NodeJs類似於Python等代碼組織的方式——包機制,require和exports。
  • 一些基本的操作系統,HTTP等網路通信,資料庫(尤其是非關係資料庫),Web編程的知識有所了解。

相關資料雖少,但是也可以羅列一些:

  • http://nodejs.org/ 官方網站,最簡單的示例,詳盡的文檔(中文版http://cnodejs.org/cman/)

  • github上的https://github.com/joyent/node以及各種周邊庫
  • The Node Beginner Book the node beginner book,深入淺出,做完很有成就感
  • 簡單的NodeJs MVC http://cnodejs.org/blog/?p=342,出自CNODEJS中文社區,上面的其他文章多訂閱多看看
  • Google和訂閱,Google各種東西教程資料,好的blog就訂閱下,不斷學習,比如說http://howtonode.org/
  • 參家一些線下的分享會,多分享多進步

github上NodeJs的周邊工具很多,如何組織使用是個問題。首先需要明確這些工具或者類庫是幹什麼用的,解決了什麼問題,如何使用。

  • npm:NodeJs包管理器
  • express:伺服器端比較流行的MVC框架,處理服務請求,路由轉發,邏輯處理
  • mongoose:mongodb包裝,更方便使用資料庫
  • http://socket.io:實現服務端和客戶端socket通信解決方案
  • backbone:客戶端MVC框架,編寫客戶端應用(豆瓣說)
  • coffeescript:提高JavaScript的可讀性,健壯性
  • zombie:瀏覽器子集,編寫html解析器,輕形javascript客戶端測試

知識有限,當然還有很多,只要了解了他們是幹什麼用的,解決什麼問題,就可以組合起來做自己想要的東西。


首先,清楚Node.js究竟是什麼?Node.js 究竟是什麼?

官方文檔和github上面的代碼無疑是最好的學習資料。

再推薦幾個不錯的文檔:

1.這個是中文版的經典入門教程:Node入門

2. Express.js 中文入門指引手冊

3. Mongoose 基本功能使用,對於mongoose的學習,官網的文檔和入門指引很好。

再然後就是自己動手做一些東西,慢慢摸索,可以參考這個,如何合理部署nodejs文件,也可以跟據自己的經驗去部署。

對了,還有這個NodeCloud - Node.js resources。

最後強烈建議多閱讀github上跟Node.js相關的模塊的源碼。

1-31更新:

這裡有個不錯的專欄: 深入淺出Node.js相關的內容

2-26更新:

全面認識 Node.js ,這個不錯,裡面資料挺多。

使用 Node.js 作為完整的雲環境開發堆棧

5-29更新:

補充一個還不錯的系列教程:

從零開始nodejs系列文章

國內關於nodejs的書籍,推薦看朴靈大大的《深入淺出NodeJs》和趙坤的《NodeJs實戰》(建議有一些基礎再看),完事再看看《用AngularJs開發下一代Web應用》就更好了。


看我的 Node.js 開源課程:alsotang/node-lessons · GitHub


以前回答了 如何系統地學習Node.js?,裡面列出了系統掌握 Node 可以從哪方面入手,但是沒有給出更加詳細的路線,而這個問題很適合聊怎樣有效地掌握 Node。

Node 常見的使用場景中,Web 和工具佔了大頭,所以這裡以 Web 開發為例。而 HTTP 協議在 Web 開發中實在是太重要了,所以應該儘早掌握,看 HTTP權威指南 或者薄一點的 圖解HTTP。拿到一段 HTTP 請求原始信息,能夠分清楚 method, path, query string, headers 和 body 等。

在掌握了 HTTP 協議之後,可以使用現成的 Web 框架(比如 Express(稍微舊了點的書,但是還能看 Node與Express開發))寫項目,先從簡單的開始,熟練掌握之後再寫相對複雜的。

比如留言板就非常簡單,能提交留言的內容,能夠顯示提交之後的內容就行。實現需求的同時要能準確區分 HTTP 請求/響應信息的相關部分。

掌握留言板之後就可以考慮寫 Todo,Todo 在留言板的基礎上增加了修改、刪除和標記完成的功能,其他部分基本上沒有什麼差異,同樣地,需要區分 HTTP 請求/響應信息的相關部分。

接著可以考慮加上用戶功能,這個時候需要 Session 和 Cookie,這個依然是 HTTP 協議的內容。並且數據如何關聯也需要掌握,然後在 Todo 的基礎上增加其他用戶可以評論的功能,進一步掌握數據如何關聯。

到了這一步就可以寫規模稍微大一點的程序了,比如博客、論壇(參考 CNode:Node.js專業中文社區)等。寫這些項目的過程中,一方面熟悉 HTTP 協議,一方面熟悉 Express 的用法。

這兩個都熟悉之後可以進行下一步的學習,實現一個 Web Server,然後在自己的 Server 上重新寫上面提到的項目,這個是最終的目標。實現的過程中需要用到 知乎用戶:如何系統地學習Node.js? 里提到的那些庫,一邊實現,一邊掌握這些庫。

當然或許不知道如何實現,那可以換一種方式,掌握 Express 的實現方式,也就是讀 Express 的源碼,把 Express 的源碼徹底搞懂(當然換一個框架也行,如果不知道選什麼框架,那麼就選 Express),這樣上面的項目裡面的代碼背後發生了什麼都能非常熟悉,這個時候自然很好地掌握了 Node Web 開發。


重視概念,不要太看重照貓畫虎的那種快捷成就感,認真地理解核心概念,從Javascript開始,先適應這種語言的思考方式,非同步,事件驅動,原型等等;然後去理解nodejs的核心,EventEmitter,Buffer,Stream,模式如Middleware,Observer,PubSub,這些東西你寫一萬遍只有簡單路由的tutorial,不專門去理解就不會理解,多少年經驗都沒用。而理解了那些東西你才可以成為專業程序員,具備程序設計的能力。

不少人覺得node編程就是用express還是用koa,或者egg,或者覺得就是ES6,7的新語法怎麼用,或者就是各種掉進工具欄的陷阱,這些都是細枝末節,web框架大同小異,寫路由是沒有技術含量的東西,語法只是糖,代替不了你自己的理解和智慧,特別是要自己架構應用的時候,工具鏈幾個月一變,只是開發的一種補充,絕不是重點。

概念第一

IT浪人


這是講Node核心的書

Node.js in Practice

Node.js the Right Way: Practical, Server-Side JavaScript That Scales

Node.js Design Patterns


starkoverflow 上相似問題的答案總結

http://stackoverflow.com/questions/2353818/how-do-i-get-started-with-nodejs


可以查看下 阿里B2B前端的 七天學會nodeJS

http://nqdeng.github.io/7-days-nodejs/


nodejs就是一種語言,我們可以通過學習一種語言的步驟去入手。

1、了解

第一步了解,就是知道該語言的概括,包括什麼內容,有什麼好處,有什麼缺點,能做點什麼。這一步驟是引起自己學習的興趣,或者是學習的需求,明白自己為什麼要學這麼語言。

2、入門

入門,至少看過一本完整的相關書籍或者教程。通過書籍,了解該語言的特性、語法,能夠敲一些簡單的代碼,比如hello world什麼的,也知道這麼語言包含哪些基礎教程。

3、熟悉

熟悉階段主要是通過實質例子去學習,可以參考別人的例子,自己重寫敲,然後經歷各種調試,修bug的艱苦過程。這也是學習一門語言進步比較快,比較有成就感的介紹,同時也是最痛苦,最容易放棄的階段,頂住了,你就這門語言的初級用戶。

4、掌握

掌握階段也是以實操為基礎,這裡和熟悉不一樣就是,做一些新的例子,最好是日常碰到的項目,通過信語言去實現,這裡除了考驗代碼的基礎語法,更重要的是實現思維的學習,每一種語言都有思維,這個階段就是好好體會。這個階段也會很艱難,項目不要去看數量,而是質量,項目的完整性很重要。

5、熟練

熟練怎麼說呢,這個階段不斷實現新的項目是重點,對新語言可以說是信手拈來,有問題能夠自己解決或者知道如何去找解決辦法,熟悉這個新語言的常見問題。能夠發現別人使用這個語言的一些問題,並能夠嘗試去解決。另外一點更重要的就是,對新語言在項目中的積累,能夠為後期的項目提高效率。完成這個階段,中高級不在話下。

6、精通

精通,這個很難用語言體會。畢竟在前端混了兩年多,沒敢跟誰說我精通了某種語言。精通css?css看似簡單,但是真正的精通恐怕還是很高深。我對這個階段的理解是:可以很輕易的用這門語言實現項目,並且能夠有優化的思路。能夠自己發現並解決項目中的問題,能夠幫別人發現並解決這門語言的問題和遺憾。另外一個重點是,能夠教別人使用這種語言。「教」是重點,比如能夠寫個入門教程什麼的。嘗試探討更深入的問題。。。


關鍵在於理解 EventIO 思路和回調函數。


個人意見,總之;要自我毀滅一次。


現在網路資料非常之多,我就不列舉了,學習順序倒可給點建議:

1.安裝node環境;

2.熟悉node的npm模塊管理命令,知道每條命令幹什麼,可以用來做些什麼事情;

3.基於node的http模塊構建簡單的sever,這個node官網應該是有的,理解這個簡單的server是怎樣接收和返回http;

4.在3的基礎上,做些類似登錄具有交互的功能,給瀏覽器發送cookies;

5.理解3,4的步驟再去看看express框架的基礎搭建,再利用3,4的學習方法投入到express框架當中;

6.基於express框架和node官網api(path模塊,fs模塊等常用),做些小項目,做管理系統啊什麼的都可以


看API,如果是nodejs入門我建議看看Node.js 台灣社群協作電子書

看了之後寫一個簡單的博客系統,那樣你就慢慢的上手了

2014年2月24日修改:

主站:

node.js

Node.JS on OpenShift

Node.js on OpenShift? You bet your Javascript

Getting Started with Node.JS on OpenShift

Getting Started with Node.JS on OpenShift

On Windows 7, OpenShift requires CygWin and you must run from that CLI.

rhc app create –a NodeJSBrownBag –t nodejs-0.6

rhc app cartridge add –a NodeJSBrownBag –c mongodb-2.0

rhc app cartridge list

git commit –a –m 「Added some source code」

git push

My existing NodeJS demo app in progress.

OpenShift / Red Hat Cloud Notes:

http://docs.redhat.com/docs/en-US/OpenShift/2.0/html/User_Guide/sect-User_Guide-Deploying_Your_Application_to_the_Cloud.html

Add Cartridges for NodeJS, Mongo, … from the openshift website

http://docs.redhat.com/docs/en-US/OpenShift/2.0/html/User_Guide/sect-User_Guide-Using_Cartridges.html

RockMongo

Web Dev Framework for Node.JS

Express - node.js web application framework

Node Debugger

smtlaissezfaire/ndb 路 GitHub

Node Inspector / Web Debugger for NodeJS

https://github.com/dannycoates/node-inspector

BDD for Node (Vows)

Vows ? Asynchronous BDD for Node

Expresso TDD for Node

http://visionmedia.github.com/expresso/

Unit Test Runner

tmpvar/mjsunit.runner 路 GitHub

http://Socket.IO

Socket.IO: the cross-browser WebSocket for realtime apps.

Tracking NodeJS Modules

http://eirikb.github.com/nipster/

Node.JS and MongoDB for Beginners

Nodejs and MongoDB, A Beginner"s Approach

Heroku + Node.js + MongoDB (not for free heroku)

http://embeddedfun.blogspot.com/2011/11/heroku-nodejs-mongolab.html

Getting Started with MongoDB and Node.JS

Node.js and MongoDB

Getting Started with Node.js on Heroku

Getting Started with Node.js on Heroku

Free Guide to Node.JS

The Node Beginner Book

Node.JS Tutorial

Node.js for beginners, part 1

Node.JS Docs

- docs.nodejitsu.com

API

Node.js v0.10.26 Manual Documentation

HTTP API

HTTP Node.js v0.10.26 Manual Documentation

Node Manual

http://nodemanual.org/latest/

From Java to NodeJS

http://n0tw0rthy.wordpress.com/2012/01/08/from-java-to-node-js/

Planet NodeJS

http://planetnodejs.com/

Useful Node.js Tools, Tutorials And Resources

Nide Node.js IDE for CLI

http://coreh.github.com/nide/

VJET IDE for Eclipse

eBay 路 GitHub

Install in Your Eclipse Using:

eBay 路 GitHub

TypeLibs for VJET

eBay 路 GitHub

node.js News

http://nodebits.org/

node.js Patterns

http://nodebits.org/distilled-patterns

JavaScript Checker

JSHint, a JavaScript Code Quality Tool

JAKE Build Tool for Node.JS

Intro to Jake

Node.JS Video

Node.js Step by Step: Introduction

Node Guide

Felix"s Node.js Guide

Master Node.JS Book

http://visionmedia.github.com/masteringnode/

Stella Laurenzo

http://nodetuts.com/tutorials/21-nodejs-mongodb-and-mongoose-11.html#video

Tim Caswell on Learning Node.js

Streaming file uploads with node.js

appendix_1 - Node.js v0.6.1 Manual Documentation

3rd Party Modules

Modules · joyent/node Wiki · GitHub

Understanding the node.js event loop ? Mixu"s tech blog

Part 1: Understanding event loops and writing great code for Node.js

Node.js, Doctor"s Offices and Fast Food Restaurants

Shine Technologies on WordPress.com

blog.nodejitsu.com

DailyJS: A JavaScript Blog

HighKick Test Runner

azer/highkick 路 GitHub

Async Spell Checker

mscdex/spellcheck 路 GitHub

Node Podcast

NodeUp: A Node.js Podcast

Learning Javascript with Object Graphs

John Resig - Simple 「Class」 Instantiation

DailyJS: Tags

DailyJS: Node Tutorial Part 2

NodeBook

Books at mixu.net

mde/timezone-js 路 GitHub

Stack for Linux and VMWare

Bitnami: The App Store for Server Software

Node.Js Everywhere

http://www.cloudave.com/19978/nodejs-why-im-basically-porting-everything-to-it/

Web Services 2.0 on Node

http://webservices20.blogspot.com/

yaronn/wcf.js 路 GitHub

Take your JavaScript skills to the server with node.js

http://cnnr.me/b/2012/05/your-first-node-dot-js-module/

There』s a CoffeeScript module.

Yahoo Mojito Ontop of NodeJs

Mojito - Yahoo"s NodeJS based Multi Device Application Framework

NodeJS News

Node.js News

Examples

Twitter Client

Build effective html5 app with node.js socket.io Twitter bootstrap

Nodetime benchmark node.js app

Build effective html5 app with node.js socket.io Twitter bootstrap

http://jamesshore.com/Agile-Book/test_driven_development.html

JSLint,The JavaScript Code Quality Tool

http://nodetime.com/blog/cpu-profiling-with-nodetime

http://sweettam.blogspot.com/2012/05/jade-visualizer-using-nodejs-and.html

Jade - Template Engine

http://jade-visualizer.herokuapp.com/

Javascript code prettifier

http://obvious.github.com/matador/

Cheerio: A faster, Windows-friendly alternative to jsdom

https://github.com/tmpvar/jsdom

JQuery for the Server

https://github.com/MatthewMueller/cheerio

http://twitter.github.com/hogan.js/

https://github.com/ded/klass

http://dustindiaz.com/klass

https://github.com/ded/valentine


這個是我當時學習的經歷,可以借鑒一下新手如何快速入門node.js


前面提到的Learn Node.js Completely and with Confidence也很不錯,詳細到每一步,有章可循。

這裡有中文的不側漏精通 Node.js


深度源碼剖析:https://github.com/yjhjstz/deep-into-node


身為一個遊戲公司的HR,在找不到node.js,我就要自學node.js了。。。


這裡有回答:如何學好node.js? - 靳洪飛的回答

學習任何編程語言都有些竅門,經驗都是相通的。

對於學node。js來說,如果想快速入門

1)先要找到好的資源站點,互聯網知識碎片化很嚴重,在優質的資源上學習能事半功倍

牧虎網 - 一站式IT技術高價值資源分享平台

2)優秀的技術文章,這個也不得不推薦我和小夥伴的社區,不是廣告,好的東西就是需要分享

3)去github上找些比較簡單的例子,邊學習基礎語法,邊動手練習,一定要多動手,這步很關鍵

4)去github上找些node。js的開源項目,自己安裝上後,去學習他的源代碼

5)多總結,多記筆記,多和行業內大牛交流

知乎上有很多回答雲山霧繞,跑題千里,真心希望大家都能尊重提問者,切中問題去回答,別忽悠一堆沒用的,碼農的時間真的是很寶貴的。


如果想簡單了解和開發node.js,可以看看這個初學文章:

http://www.gbin1.com/technology/javautilities/20120904-node-js-for-beginners


歡迎訪問ANTCP我的網站就是node寫的哦,網上看的視頻,無互聯網背景。 ANTCP


推薦閱讀:

業餘人士想要學習編曲需要具備些什麼?
有幾個月的空閑時間我可以幹些什麼?
自學鋼琴可行性高嗎?
零基礎如何自學樂理?

TAG:自學 | Nodejs | 編程學習 |