從我大一接觸第一門編程語言C開始,到如今工做三年陸續接觸到了C、彙編、C++、C#、Java、JavaScript、PHP,還有一些HTML、CSS神馬的,歷來沒有一門語言讓我像對node.js同樣的着迷。接觸nodejs在我以前博客提到過在搞web socket在選擇服務器的時候不少人推薦nodejs版的,無奈當時對nodejs沒有任何概念,因此沒看懂人家寫的代碼,可是感受很熟悉,網上基本是以在服務器端運行的javascript來解釋什麼是nodejs,這就讓我更疑惑了,javascript怎麼可能作socket服務器,在用C#寫出服務器後回頭看了一下node.js,十分鐘以後我就被徹底吸引住了。javascript
補記:因爲寫博客是對nodejs處於瞭解語法階段,不少問題沒有說清楚,點反對的人很多,關於一些原理性東西能夠看看關於node.js的誤會html
到底什麼是node.js呢?看看官網對nodejs的描述:java
Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.node
咱們能夠對此總結出幾點python
Chrome JavaScript runtime也就是咱們常說的 Chrome的V8 JavaScript Engine,也就是Goole開發的一個用於Chrome瀏覽器的底層JavaScript引擎,用於解析JavaScript語句建立其運行環境,保證咱們寫的語句在瀏覽器上的表現和咱們預期的一致。git
那麼爲何說node.js是服務器端運行的JavaScript?好好地nodejs幹嗎要和V8扯上關係?除了Google搞的V8解釋JavaScript十分的快,十分重要的一個緣由是V8 JavaScript 引擎並不只限於在瀏覽器中運行,能夠嵌入任何應用程序中運行。Node.js 和.net framework相似是一個平臺(這裏有些搞不明白,望大神們指點一二),但它沒有像.net同樣創造了一門語言——C#在這個平臺上運行,而是很巧妙的借用了web開發人員已經很是熟悉的JavaScript語法,使用V8引擎來解析語句,並將其重建可在服務器上使用。因此嚴格上說node.js並非服務器端運行的Javascript,而是能夠在服務器端運行JavaScript語法的平臺。 web
搞了半天就是一個新瓶裝舊酒的東西,看起來除了一個新鮮的可使用JavaScript語法,node.js沒什麼長處,爲何要用它而不是一樣能夠在服務器端運行的Java或C#呢?這要從node.js事件驅動和非阻塞I/O的特點談起。關於事件驅動熟悉JavaScript的同窗應該很熟悉了,node.js採用一系列「非阻塞」庫來支持事件循環的方式。本質上就是爲文件系統、數據庫之類的資源提供接口,好比一個數據庫訪問,採用事件機制,發起請求以後,當即將進程交出,當數據返回後觸發事件,再繼續處理數據。ajax
在傳統的阻塞I/O中其運行過程是這樣的數據庫
int num=query('select * from ......'); print(num);
...................//無關語句
print方法必須等待query方法返回結果,若是數據庫出現網絡鏈接故障,那麼print方法就要等到超時才能執行,而後後面一些無關語句才能一次執行,而在非阻塞I/O中是這樣的npm
query('select * from...',callback(data){ .............//相關語句 print(); }); ..............//無關語句
跟咱們使用ajax,在回調函數中處理結果,可是不影響下面語句執行。 怪不得node.js要借用JavaScript來作此事,JavaScript的幾個特性使它很勝任這項工做
nodejs的安裝仍是很簡單的,尤爲是如今安裝包都把npm集成了進去,不用單獨安裝了,下載下安裝包運行就能夠了,另外想完整使用nodejs的話須要有C語言的編譯環境、git和python,使用window的同窗很能會稍微麻煩一些,須要搞定這些。對命令行情有獨鍾的同窗能夠看看How to Install Node.js
npm是什麼
npm是node packaged modules的縮寫,實際上是一個nodejs的module的管理工具
什麼是module
所謂module和java中的包的概念很相似,一些解決方案的集合,官方會提供核心的幾個,第三方的不少
如何安裝第三方module
由於nodejs的社區很活躍,有不少好用的第三方的包,咱們能夠在終端中使用npm的命令安裝
還有一些經常使用命令能夠看看npm經常使用命令
這些都搞定後咱們就能夠寫傳說中的hello world了。在任意目錄建一個test.js文件
console.log('Hello, World!');
簡單的一句話就能夠,而後使用node命令運行
這這這。。。太沒技術含量了,看看官方給的demo,使用nodejs建立一個web server有多簡單
var http=require('http');//引入http module 2 http.createServer(function(request,response){//建立一個web server 3 //回調函數,這樣建立server方法就不會阻塞了 4 response.writeHead(200,{'contentType':'text/plain'}); 5 response.end('Hello World!\n'); 6 }).listen(8124); 7 console.log('Server running at http://127.0.0.1:8124/');
先運行一下服務器,按兩次Ctrl+C退出
使用瀏覽器訪問一下
就這麼簡單
看到上面的demo是否是也對nodejs產生興趣了呢,但是像我這樣的懶人接觸一門新語言的時候不知道該如何下手,難道又要去作個無聊的購物車神馬的嘛,學習nodejs不用,nodejs爲咱們提供了一個小遊戲同樣的教程,就像個尋寶過程從零開始,沒步都有一個任務和一下提示讓你走的更遠,上nodeschool下載而後開始尋寶吧,我就是被這小遊戲迷住了,順便秀一下我一天的戰績,每一個任務都完成了
看看解釋就知道怎麼作了,不過建議最開始run和verify結合使用,verify告訴你執行結果和預期結果,run會告訴你有哪些錯誤
固然除了這些小遊戲幫咱們熟悉nodejs語法及使用,一些優秀的社區也能夠幫咱們不少