|
譯文全文:http://jayli.github.com/whatisnode/index.html
作者:Brett McLaughlin ,原文:What is Node?
Node不是萬能藥!但的確能解決一些關鍵問題。
學習Node不是一件輕松事兒,但你所收到的回報是對得起你的付出的。因為當下Web應用開發中的諸多難題唯有JavaScript才能解決。
目錄
1,專家們的警告!
2,Node:幾個小例子
3,Node不是JavaScript,Node可以運行JavaScript
4,和Node服務器的交互
5,快速入門手冊
6,解釋器之惑
7,基于事件的Web應用
8,Node的用武之地
“你夠酷嗎?來用我吧!” Node.js 為最新潮的編程語言提供了一系列很酷的API和工具箱,它可以直接應用于傳統的Rails、Ajax、Hadoop、甚至可以某種程度上用于iPhone開發和HTML5。如果你參加過一些大型技術會議,你總是會聽到一些關于Node.js的主題演講,盡管這些話題對普通的開發者來說依然有些難以企及。
你可能已經聽說Node.js(有時我們將其簡稱為“Node”)是一個服務器端的解決方案,它可以運行JavaScript,并可以作為Web服務來處理HTTP請求。如果這些東東還不至于讓你暈頭轉向的話,轉眼間關于端口、sockets和線程的討論就又成了當下最熱門的話題,你會覺得這些東西讓你眼花繚亂。這些內容真的屬于JavaScript的范疇嗎?為什么世界上那么多人寧愿將JavaScript脫離瀏覽器而運行,更不用說將JavaScript運行于服務器端了?
好消息是,你所聽到的(所想到的)關于Node的一切都是正確的。Node的的確確是屬于網絡編程的范疇,用以處理服務器端的請求和響應。壞消息是和之前的Rails、Ajax和Hadoop一樣,真正實用的技術資料實在太少。等到基于Node的“優秀的”框架成熟之后,技術資料一定會跟得上的,但何必要等到技術書籍和教程都出來之后再去嘗試使用Node呢?現在就使用Node,說不定會給你的代碼帶來意想不到的改觀,甚至讓你的程序變得更易實現。
專家門的警告!
和大多數技術一樣,Node也是新瓶裝舊酒:它看起來不透明而且很怪異,但獨受小開發團隊的青睞。如果你沒有接觸過Node,則需要學習一些很容易上手的服務器端腳本。你需要花時間來搞清楚Node,因為即便是運行于服務器端的JavaScript,它和客戶端JavaScript也極為不同。實際情況是,你不得不自己給自己洗腦,以便重新學習理解圍繞JavaScript的事件處理機制、異步IO和一些網絡基礎知識。
不幸的是,這意味著如果你已經用Node作開發超過兩年時間的話,你會覺得這篇文章內容很單調乏而且過于簡單。你會開始尋找新的“刺激”,比如將Node運行于客戶端,或者開始嘗試事件I/O、反射器模式和npm。你會發現Node的世界是如此有趣,甚至很多Node高級技術具有某種史詩般的美感,而這些東西對于初學者來說依然是難于企及的。因此,或許你應該將你掌握的知識分享給你的同伴,尤其是對于那些不了解Node的同學,當他們開始對Node感興趣時,給他們分享傳授Node高級技術。
Node:幾個小例子
首先,你應當意識到Node是用于運行獨立的JavaScript程序的,而不是運行于瀏覽器中的某個HTML片段里。它是存放在文件系統中的真實存在的文件,由Node程序執行,以一種守護進程的模式運行,同時打開對某些端口的監聽。
跳過 hello world
最經典的例子當然是“Hello World“,在Node官網(http://nodejs.org/docs/latest )上有源碼。幾乎每個人都是從Hello World開始接觸Node的。現在讓我們跳過這個最簡單的例子,來看一些更有趣的例子:實現一個可以從服務器發送文件到客戶端的程序(而不僅僅是發送一段文本到客戶端)。
var sys = require("sys"),http = require("http"),
url = require("url"),
path = require("path"),
fs = require("fs");
http.createServer(function(request, response) {
var uri = url.parse(request.url).pathname;
var filename = path.join(process.cwd(), uri);
path.exists(filename, function(exists) {
if(!exists) {
response.writeHead(404, {"Content-Type": "text/plain"});
response.end("404 Not Found/n");
return;
}
fs.readFile(filename, "binary", function(err, file) {
if(err) {
response.writeHead(500, {"Content-Type": "text/plain"});
response.end(err +"/n");
return;
}
response.writeHead(200);
response.end(file, "binary");
});
});
}).listen(8080);
console.log("Server running at http://localhost:8080/");
it知識庫:什么是Node.js?,轉載需保留來源!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。