【NodeJS】---express配置ejs mongoose route等

express建立項目

命令行下: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);

解讀app.js

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 替換時的回調, 默認爲null
  • json spaces JSON 響應的空格數量,開發環境下是2 , 生產環境是0
  • case 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.routerconnect router的增強版,用來處理app.getapp.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中

相關文章
相關標籤/搜索