如果你安裝了npm,安裝變得很簡(jiǎn)單,只需要在終端中運(yùn)行下面的代碼即可:
代碼如下:
npm install express -gd
-g代表安裝到NODE_PATH的lib里面,而-d代表把相依性套件也一起安裝。如果沒(méi)有-g的話會(huì)安裝目前所在的目錄(會(huì)建立一個(gè)node_modules的文件夾),你可以透過(guò)以下指令來(lái)比較兩者的不同:
代碼如下:
npm list -g
npm list
如果沒(méi)有npm,那么我可以使用github來(lái)git下來(lái)最新的express。
好了,現(xiàn)在你可以通過(guò)express testapp來(lái)建立express實(shí)例。以下是示例:
代碼如下:
cd ~
express testapp
cd testapp
node app.js
這樣就建立了一個(gè)testapp的nodejs應(yīng)用,而app.js是默認(rèn)的應(yīng)用主js。下面來(lái)詳細(xì)的說(shuō)說(shuō)app.js中的各項(xiàng)配置。
引入模塊
代碼如下:
var express = require('express');
var app = module.exports = express.createServer();
require()是node.js提供的函數(shù),可以讓你引入其他模塊以調(diào)用模塊的函數(shù)和變量,默認(rèn)下node.js會(huì)在$NODE_PATH和目前js所在目錄下的node_modules文件夾下去尋找模塊。require也可以用來(lái)載入自己寫的模塊哦~這樣涉及到node.js的模塊機(jī)制,后面有機(jī)會(huì)就在介紹。
第二行的express.createServer()就是在建立server,而中間的module.exports也是涉及到node.js的模塊機(jī)制,以后再說(shuō)。
express的app.js的詳細(xì)配置說(shuō)明
express.js繼承自connect模塊,所以如果你的node_modules文件夾下沒(méi)有connect模塊也是不行的。
設(shè)置views路徑和模板
我們?cè)賮?lái)看下面兩行:
代碼如下:
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
上面兩行是設(shè)置views文件夾,即模板文件夾,__dirname是node.js里面的全局變量,即取得執(zhí)行的js所在的路徑,另外__filename是目前執(zhí)行的js文件名。所以,app.set(‘views', __dirname + ‘/views');是設(shè)置views的文件夾。
而app.set('view engine', 'jade');是設(shè)置express.js所使用的render engine。除了Jade之外,express.js還支持EJS(embedded javascript)、Haml、CoffeScript和jQuery template等js模板。
app.use配置
代碼如下:
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(__dirname + '/public'));
express.bodyParser()是Connect內(nèi)建的middleware,設(shè)置此處可以將client提交過(guò)來(lái)的post請(qǐng)求放入request.body中。
express.methodOverride()也是Connect內(nèi)建的,可以協(xié)助處理POST請(qǐng)求偽裝PUT、DELETE和其他HTTP methods。
app.router()是route requests,但express.js的官方文件是這句可有可無(wú),并且經(jīng)過(guò)測(cè)試還真的是這樣,不過(guò)還是寫上吧。
express.static()也是一個(gè)Connect內(nèi)建的middleware來(lái)處理靜態(tài)的requests,例如css、js、img文件等。所以static()里面指定的文件夾中的文件會(huì)直接作為靜態(tài)資源吐出來(lái)。
app.configure設(shè)置
代碼如下:
app.configure('development', function(){
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
app.configure('production', function(){
app.use(express.errorHandler());
});
express.errorHandler()是Connect內(nèi)建的middleware來(lái)協(xié)助處理例外。這裡也揭露了app.configure()的令一個(gè)用法,第一個(gè)參數(shù)是node.js的環(huán)境設(shè)定,如此我們就可以設(shè)定在不同的執(zhí)行環(huán)境使用不同程度的dump。PS:node.js是透過(guò)NODE_ENV這個(gè)環(huán)境變數(shù)來(lái)取得環(huán)境設(shè)定,e.g.:在命令列,NODE_ENV=production node app.js就可以進(jìn)入production環(huán)境。
路由和request的處理
ok,下面是nodejs處理request的內(nèi)容:
代碼如下:
app.get('/', function(req, res){
res.render('index', {
title: 'Express'
});
});
上面的代碼意思是,get請(qǐng)求根目錄則調(diào)用views文件夾中的index模板,并且傳入?yún)?shù)title為“Express”,這個(gè)title就可以在模板文件中直接使用。
在express中要處理post請(qǐng)求,需要使用app.post()。如下面的代碼:
代碼如下:
app.post('/add', function(req,res){
res.render('add', {
sum: req.body.a + req.body.b
});
});
前面我們提到了req.body是express.bodyParser()把POST參數(shù)處理后的結(jié)果。
另外除了get和post方法,還有app.all()意思就是所有的請(qǐng)求處理。
添加listen,啟動(dòng)nodejs服務(wù)器
代碼如下:
app.listen(3000);
console.log(
"Express server listening on port %d in %s mode",
app.address().port,
app.settings.env);
到目前為止,我們就基本全明白了express配置了,也就不會(huì)像以前那樣跟別人都寫個(gè)hello world卻不知道各行代碼的含義了。
轉(zhuǎn)自 JS8.IN ™
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com