|
譯文全文:http://jayli.github.com/whatisnode/index.html
作者:Brett McLaughlin ,原文:What is Node?
Node不是萬(wàn)能藥!但的確能解決一些關(guān)鍵問(wèn)題。
學(xué)習(xí)Node不是一件輕松事兒,但你所收到的回報(bào)是對(duì)得起你的付出的。因?yàn)楫?dāng)下Web應(yīng)用開(kāi)發(fā)中的諸多難題唯有JavaScript才能解決。
目錄
1,專家們的警告!
2,Node:幾個(gè)小例子
3,Node不是JavaScript,Node可以運(yùn)行JavaScript
4,和Node服務(wù)器的交互
5,快速入門手冊(cè)
6,解釋器之惑
7,基于事件的Web應(yīng)用
8,Node的用武之地
“你夠酷嗎?來(lái)用我吧!” Node.js 為最新潮的編程語(yǔ)言提供了一系列很酷的API和工具箱,它可以直接應(yīng)用于傳統(tǒng)的Rails、Ajax、Hadoop、甚至可以某種程度上用于iPhone開(kāi)發(fā)和HTML5。如果你參加過(guò)一些大型技術(shù)會(huì)議,你總是會(huì)聽(tīng)到一些關(guān)于Node.js的主題演講,盡管這些話題對(duì)普通的開(kāi)發(fā)者來(lái)說(shuō)依然有些難以企及。
你可能已經(jīng)聽(tīng)說(shuō)Node.js(有時(shí)我們將其簡(jiǎn)稱為“Node”)是一個(gè)服務(wù)器端的解決方案,它可以運(yùn)行JavaScript,并可以作為Web服務(wù)來(lái)處理HTTP請(qǐng)求。如果這些東東還不至于讓你暈頭轉(zhuǎn)向的話,轉(zhuǎn)眼間關(guān)于端口、sockets和線程的討論就又成了當(dāng)下最熱門的話題,你會(huì)覺(jué)得這些東西讓你眼花繚亂。這些內(nèi)容真的屬于JavaScript的范疇嗎?為什么世界上那么多人寧愿將JavaScript脫離瀏覽器而運(yùn)行,更不用說(shuō)將JavaScript運(yùn)行于服務(wù)器端了?
好消息是,你所聽(tīng)到的(所想到的)關(guān)于Node的一切都是正確的。Node的的確確是屬于網(wǎng)絡(luò)編程的范疇,用以處理服務(wù)器端的請(qǐng)求和響應(yīng)。壞消息是和之前的Rails、Ajax和Hadoop一樣,真正實(shí)用的技術(shù)資料實(shí)在太少。等到基于Node的“優(yōu)秀的”框架成熟之后,技術(shù)資料一定會(huì)跟得上的,但何必要等到技術(shù)書(shū)籍和教程都出來(lái)之后再去嘗試使用Node呢?現(xiàn)在就使用Node,說(shuō)不定會(huì)給你的代碼帶來(lái)意想不到的改觀,甚至讓你的程序變得更易實(shí)現(xiàn)。
專家門的警告!
和大多數(shù)技術(shù)一樣,Node也是新瓶裝舊酒:它看起來(lái)不透明而且很怪異,但獨(dú)受小開(kāi)發(fā)團(tuán)隊(duì)的青睞。如果你沒(méi)有接觸過(guò)Node,則需要學(xué)習(xí)一些很容易上手的服務(wù)器端腳本。你需要花時(shí)間來(lái)搞清楚Node,因?yàn)榧幢闶沁\(yùn)行于服務(wù)器端的JavaScript,它和客戶端JavaScript也極為不同。實(shí)際情況是,你不得不自己給自己洗腦,以便重新學(xué)習(xí)理解圍繞JavaScript的事件處理機(jī)制、異步IO和一些網(wǎng)絡(luò)基礎(chǔ)知識(shí)。
不幸的是,這意味著如果你已經(jīng)用Node作開(kāi)發(fā)超過(guò)兩年時(shí)間的話,你會(huì)覺(jué)得這篇文章內(nèi)容很單調(diào)乏而且過(guò)于簡(jiǎn)單。你會(huì)開(kāi)始尋找新的“刺激”,比如將Node運(yùn)行于客戶端,或者開(kāi)始嘗試事件I/O、反射器模式和npm。你會(huì)發(fā)現(xiàn)Node的世界是如此有趣,甚至很多Node高級(jí)技術(shù)具有某種史詩(shī)般的美感,而這些東西對(duì)于初學(xué)者來(lái)說(shuō)依然是難于企及的。因此,或許你應(yīng)該將你掌握的知識(shí)分享給你的同伴,尤其是對(duì)于那些不了解Node的同學(xué),當(dāng)他們開(kāi)始對(duì)Node感興趣時(shí),給他們分享傳授Node高級(jí)技術(shù)。
Node:幾個(gè)小例子
首先,你應(yīng)當(dāng)意識(shí)到Node是用于運(yùn)行獨(dú)立的JavaScript程序的,而不是運(yùn)行于瀏覽器中的某個(gè)HTML片段里。它是存放在文件系統(tǒng)中的真實(shí)存在的文件,由Node程序執(zhí)行,以一種守護(hù)進(jìn)程的模式運(yùn)行,同時(shí)打開(kāi)對(duì)某些端口的監(jiān)聽(tīng)。
跳過(guò) hello world
最經(jīng)典的例子當(dāng)然是“Hello World“,在Node官網(wǎng)(http://nodejs.org/docs/latest )上有源碼。幾乎每個(gè)人都是從Hello World開(kāi)始接觸Node的。現(xiàn)在讓我們跳過(guò)這個(gè)最簡(jiǎn)單的例子,來(lái)看一些更有趣的例子:實(shí)現(xiàn)一個(gè)可以從服務(wù)器發(fā)送文件到客戶端的程序(而不僅僅是發(fā)送一段文本到客戶端)。
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知識(shí)庫(kù):什么是Node.js?,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。