Node & Express

安裝 Node


用Node實(shí)現(xiàn)的簡(jiǎn)單Web服務(wù)器


創(chuàng)建一個(gè) hello.js 文件

var http = require('http'); 
 
http.createServer(function(req,res){ 
        res.writeHead(200, { 'Content-Type': 'text/plain' });  
        res.end('Hello world!'); 
}).listen(3000); 
 
console.log('Server started on localhost:3000');

在和 helloWorld.js 同一個(gè)目錄下飒责,輸入 node hello.js

然后打開(kāi)瀏覽器訪問(wèn) http://localhost:3000

第一個(gè) Web 服務(wù)器就建成啦

路由


路由是指處理客戶端發(fā)出的不同請(qǐng)求路徑的機(jī)制邑贴。

比如:如何處理以下的請(qǐng)求

http://localhost:3000/
http://localhost:3000/about
http://localhost:3000/may-not-exist

給以上的服務(wù)器增加路由處理

var http = require('http'); 
 
http.createServer(function(req,res){ 
        // 規(guī)范化 url,去掉查詢字符串签则、可選的反斜杠,并把它變成小寫(xiě) 
        var path = req.url.replace(/\/?(?:\?.*)?$/, '').toLowerCase();  
        switch(path) { 
                case '': 
                        res.writeHead(200, { 'Content-Type': 'text/plain' }); 
                        res.end('Homepage'); 
                        break; 
                case '/about': 
                        res.writeHead(200, { 'Content-Type': 'text/plain' }); 
                        res.end('About'); 
                        break; 
                default: 
                        res.writeHead(404, { 'Content-Type': 'text/plain' });  
                        res.end('Not Found'); 
                        break; 
        } 
}).listen(3000); 
 
console.log('Server started on localhost:3000');

靜態(tài)資源服務(wù)


用 Node 提供靜態(tài)資源只適用于初期的小型項(xiàng)目铐料,對(duì)于比較大的項(xiàng)目渐裂,你應(yīng)該會(huì)想用 Nginx 或 CDN 之類的代理服務(wù)器來(lái)提供靜態(tài)資源豺旬。

Node 處理靜態(tài)資源文件,必須打開(kāi)文件柒凉,讀取其中的內(nèi)容族阅,然后將這些內(nèi)容發(fā)送給瀏覽器。

準(zhǔn)備工作:
創(chuàng)建一個(gè)名為 public 的目錄膝捞,
在這個(gè)目錄下創(chuàng)建文件 home.html坦刀、about.html、notfound.html蔬咬,
創(chuàng)建子目錄 img鲤遥,在其中添加一個(gè)名為logo.jpg 的圖片。
在你的 HTML 文件中這樣引用 logo:<img src="/img/logo.jpg" alt="logo">

目錄

修改hello.js

var http = require('http'), 
        fs = require('fs'); 
 
function serveStaticFile(res, path, contentType, responseCode) { 
        if(!responseCode) responseCode = 200;  
        fs.readFile(__dirname + path, function(err,data) { 
                if(err) { 
                        res.writeHead(500, { 'Content-Type': 'text/plain' }); 
                        res.end('500 - Internal Error'); 
                } else {  
                        res.writeHead(responseCode,  { 'Content-Type': contentType }); 
                        res.end(data); 
                }  
        }); 
} 

http.createServer(function(req,res){ 
        // 規(guī)范化 url计盒,去掉查詢字符串渴频、可選的反斜杠,并把它變成小寫(xiě) 
        var path = req.url.replace(/\/?(?:\?.*)?$/, '') .toLowerCase();  
        switch(path) { 
                case '':  
                        serveStaticFile(res, '/public/home.html', 'text/html');  
                        break; 
                case '/about': 
                        serveStaticFile(res, '/public/about.html', 'text/html'); 
                        break; 
                case '/img/logo.jpg': 
                        serveStaticFile(res, '/public/img/logo.jpg', 'image/jpeg');  
                        break; 
                default: 
                        serveStaticFile(res, '/public/404.html', 'text/html', 404);  
                        break; 
        } 
}).listen(3000); 
 
console.log('Server started on localhost:3000');

Express


安裝express :npm install --save express

創(chuàng)建 meadowlark.js 文件

var express = require('express'); 
 
var app = express(); 
 
app.set('port', process.env.PORT || 3000); 
 
// 定制 404 頁(yè)面 
app.use(function(req, res){  
        res.type('text/plain'); 
        res.status(404); 
        res.send('404 - Not Found'); 
}); 
 
// 定制 500 頁(yè)面 
app.use(function(err, req, res, next){  
        console.error(err.stack); 
        res.type('text/plain'); 
        res.status(500); 
        res.send('500 - Server Error'); 
}); 
 
app.listen(app.get('port'), function(){ 
  console.log( 'Express started on http://localhost:' + 
    app.get('port') + '; press Ctrl-C to terminate.' ); 
});

啟動(dòng)這個(gè)服務(wù)器 node meadowlark.js 北启,然后訪問(wèn) http://localhost:3000

最后卜朗, 給首頁(yè)和關(guān)于頁(yè)面加上路由。在 404 處理器之前加上兩個(gè)新路由

app.get('/', function(req, res){  
         res.type('text/plain'); 
         res.send('Meadowlark Travel'); 
}); 
app.get('/about', function(req, res){ 
         res.type('text/plain'); 
         res.send('About Meadowlark Travel'); 
}); 
 
// 定制 404 頁(yè)面 
app.use(function(req, res, next){  
        res.type('text/plain'); 
        res.status(404); 
        res.send('404 - Not Found'); 
});
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末咕村,一起剝皮案震驚了整個(gè)濱河市场钉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌懈涛,老刑警劉巖逛万,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異批钠,居然都是意外死亡宇植,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門埋心,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)指郁,“玉大人,你說(shuō)我怎么就攤上這事拷呆∠锌玻” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵茬斧,是天一觀的道長(zhǎng)腰懂。 經(jīng)常有香客問(wèn)我,道長(zhǎng)项秉,這世上最難降的妖魔是什么绣溜? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮娄蔼,結(jié)果婚禮上涮毫,老公的妹妹穿的比我還像新娘瞬欧。我一直安慰自己,他們只是感情好罢防,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布艘虎。 她就那樣靜靜地躺著,像睡著了一般咒吐。 火紅的嫁衣襯著肌膚如雪野建。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,441評(píng)論 1 310
  • 那天恬叹,我揣著相機(jī)與錄音候生,去河邊找鬼。 笑死绽昼,一個(gè)胖子當(dāng)著我的面吹牛唯鸭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播硅确,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼目溉,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了菱农?” 一聲冷哼從身側(cè)響起缭付,我...
    開(kāi)封第一講書(shū)人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎循未,沒(méi)想到半個(gè)月后陷猫,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡的妖,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年绣檬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嫂粟。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡河咽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出赋元,到底是詐尸還是另有隱情,我是刑警寧澤飒房,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布搁凸,位于F島的核電站,受9級(jí)特大地震影響狠毯,放射性物質(zhì)發(fā)生泄漏护糖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一嚼松、第九天 我趴在偏房一處隱蔽的房頂上張望嫡良。 院中可真熱鬧锰扶,春花似錦、人聲如沸寝受。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)很澄。三九已至京闰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間甩苛,已是汗流浹背蹂楣。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留讯蒲,地道東北人痊土。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像墨林,于是被迫代替她去往敵國(guó)和親赁酝。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容