命令行下:css
express prj_namehtml
cd prj_name && npm installnode
ejs htmlgit
var ejs = require('ejs'); //增長 app.set('views', path.join(__dirname, 'public/views'));//設置模板文件夾路徑,可本身指定 app.engine('html',ejs.__express); //增長 app.set('view engine', 'html');//設置使用的模板引擎
配置端口監聽github
app.set('env', process.env.NODE_ENV || 'development');
app.set('port', app.config.server.port || 3000);
require以後建立一個express應用程序:ajax
var app = express();
這個能夠留在app.js中數據庫
接下來是一大段的app.set 和 app.use:express
// all environments app.set('port', process.env.PORT || 3000); app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.use(express.favicon()); app.use(express.logger('dev')); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.cookieParser('your secret here')); app.use(express.session()); app.use(app.router); app.use(require('less-middleware')({ src: __dirname + '/public' })); app.use(express.static(path.join(__dirname, 'public'))); // development only if ('development' == app.get('env')) { app.use(express.errorHandler()); }
app.set
用來設置環境變量,第一個參數是環境變量的name,第二個參數是值;在其餘須要訪問環境變量的地方,能夠用app.get
獲取,好比上面的app.get('env')
。下面是一些內建Express環境變量:npm
env
運行時環境,默認爲 process.env.NODE_ENV 或者 "development"trust proxy
激活反向代理,默認未激活狀態jsonp callback name
修改默認?callback=的jsonp回調的名字json replacer
JSON replacer 替換時的回調, 默認爲nulljson spaces
JSON 響應的空格數量,開發環境下是2 , 生產環境是0case sensitive routing
路由的大小寫敏感, 默認是關閉狀態, "/Foo" 和"/foo" 是同樣的strict routing
路由的嚴格格式, 默認狀況下 "/foo" 和 "/foo/" 是被一樣對待的view cache
模板緩存,在生產環境中是默認開啓的view engine
模板引擎views
模板的目錄咱們用到了最後兩個,設置了頁面顯示的模板引擎和保存模板的目錄。json
設置app.use([path], function)是指在訪問前綴爲path
的路徑執行時中間函數function
,上面的代碼中沒有指定path
,則表示在訪問默認前綴/
的路徑時執行中間函數function
。好比上面代碼中的
app.use(require('less-middleware')({ src: __dirname + '/public' }));
app.use(express.static(path.join(__dirname, 'public')));
在訪問請求靜態文件/stylesheets/style.css
時,就會先執行less-middleware,再執行express.static
,返回public/stylesheets/style.css
給瀏覽器端。
app.use()
的出場順序很是重要,use的前後順序決定了中間函數的優先級。 好比express.logger()
一般是第一個,能夠記錄所有請求。若是不想記錄靜態文件的請求,能夠把less-middleware和 app.use(express.static)
放到logger
前面。
在express之前的版本中有個app.configure()方法,該方法雖然仍得以保留,但推薦使用if
代替:
if ('development' == app.get('env'))
由於之後還會有不少配置,因此咱們要把這部份內容提取出來放到單獨的文件中,建立/config/express.coffee
作這些配置,而在app.js中用require代替這部分代碼:
require('./config/express')(app);
express.favicon(iconPath)
:用來設置網站的圖標,參數爲圖標的路徑。若是不指明,則用默認的express圖標。能夠修改成:
app.use(express.favicon(path.join(__dirname, '../public/img/favicon.ico')))
express.bodyParser()
: 對請求內容進行解析,支持json、 application/x-www-form-urlencoded、multipart/form-data 格式數據的解析。也就是說ajax和form發送請求時,都會通過它的處理,方便在req中獲取相應的請求值。在express中處理文件上傳也是用它,能夠給出參數指明上傳文件存放的路徑,好比:
app.use(express.bodyParser({uploadDir:'./uploads'}))
express.methodOverride()
:爲了支持put、delete等HTTP方法,不過要客戶端配合,包含相應的_method
參數,好比:
<form action='/users/1'> ...
<input type="hidden" name="_method" value="put" />
</form>
能夠對應到:app.put('/users/:id', users.put)
app.use(express.cookieParser('your secret here'));
和app.use(express.session());
:是爲了支持session,在這樣的設置中,session會被加密保存在客戶端的cookie,但這樣程序重啓後session就不起做用了,不過express.session支持session的持久化保存,由於express用的最多的數據庫就是mongo,因此下面給出用mongo保存session的配置。首先要在package.json里加上依賴項connect-mongo
:
"connect-mongo": "0.3.3"
而後在config/express.coffee中引入connect-mongo,並修改express.session的設置:
mongoStore = require('connect-mongo')(express) app.use express.session secret: '1234567890' store: new mongoStore url: config.db, collection : 'sessions'
app.router
是connect router的增強版,用來處理app.get
,app.post
等請求處理設置,在瀏覽器訪問這些設置中對應的url時,express.router
會調用相應的function。若是不顯式調用app.use(app.router)
,express會在第一次碰到app.get(...)
之類的設置時隱含調用,因此這個能夠不用出如今配置項裏,但.use
的順序很關鍵,因此顯式調用比較好。好比在use
中出現app.use(express.static(path.join(__dirname, 'public')));
時,若是router沒有出現,或被放在了它後面,那服務器每次遇到請求就會到硬盤上找有沒有對應的靜態文件,會形成性能降低
文件最後的代碼是啓動服務器,並輸出一段日誌:
http.createServer(app).listen(app.get('port'), function(){ console.log('server listening on port ' + app.get('port')); });
這個也要保留在app.js中