express + redis 構建基於node的開發環境

Node.js的性能毋庸置疑,基於Chrome的V8引擎,使用全異步化的處理方式,使得Node.js具有其他web框架無與倫比的性能優勢。

異步化的開發模式雖然在性能上有很大的提升,但是個人覺得基於異步化的開發模式,會似的代碼分散在各個模塊中,對面向對象的封裝性有着比較大的侵擾。當然也可能僅僅是個人的一點愚見。

言歸正傳,搭建基於express的web開發框架流程如下

1. 安裝node環境

windows環境,下載最新的node的穩定版

安裝後使用node -v檢查安裝是否成功

linux環境,下載最新的二進制安裝包或者源碼包進行安裝


2. 安裝express開發環境

使用npm -g install express命令即可將express系統全局安裝到node模塊系統中

npm的全局安裝和本地安裝的區別,npm全局安裝和本地安裝在命令行的執行上僅僅在於是否添加了-g參數,

如果添加了-g參數,則是全局安裝,否則是本地安裝,全局安裝後可以在命令行中執行相關的命令,一般如express等需要在命令行中執行的模塊建議選擇全局安裝,

而本地安裝則是在當前命令運行的目錄下創建node_modules文件夾,將依賴的相關模塊下載安裝到此文件夾下,一般依賴的一些第三方的庫建議選擇本地安裝


3. 使用express模板,生成express工程

使用express -e myprj 命令生成express的工程,其中使用-e 表示使用的是ejs模板 來生成對應的html文件

生成對應的工程後,可以在工程目錄中看到

bin, node_modules, public, routes,views, app.js, packapge.json文件/文件夾

其中package.json文件爲工程的描述文件

app.js爲系統的啓動文件

routes中包含兩個文件index. js user.js涉及到路由相關的內容

views中爲系統的模板文件,系統需要使用到的一些html,ejs模板均可以在此目錄下找到,

public爲一些公共文件的路徑,主要存放一些js,圖片,css等靜態資源

node_modules爲工程中需要使用的一些node模塊的存放地,可以在package.json文件中添加工程依賴的相關模塊,然後使用npm install命令即可將相關的模塊

局部安裝到此目錄下

bin爲系統啓動的腳本文件



4. 安裝redis連接器中間件

使用npm install redis-connector命令即可將redis的node驅動安裝到本工程中


5. 修改app.js

其中cookie設置session的時間(單位毫秒),需要注意的是此時間需要設置爲大於1分鐘,過短可能會導致session不過期的現象

在path後加載session模塊和redis的驅動模塊

var session = require('express-session');
var RedisStore = require('connect-redis')(session);


session使用redis作爲session的存放地,當然也可以存放在mongodb中,redis的性能自不必多少,由於redis在存放的數據大於1k的時候性能可能會急劇下降,redis在處理大數據量的性能測試,可以參考相關性能測試結果,因此不要將過多的數據存放在redis中。由於使用redis作爲session存儲的地方,因此可以設置數據的過期時間,有些在構造參數中設置ttl數據,應該是設置緩存的session數據在redis中的過期時間

app.use(session({

  store: new RedisStore({
    host: "192.168.142.138",
    port: 6379,
    db: "0"
  }),
  resave:false,
  saveUninitialized:true,
  secret: 'keyboard cat',
  cookie: {maxAge: 100000}
}))


app.use('/', routes);
app.use('/users', users);

對session的處理要放在/攔截器和/users攔截器的前面


其中cookie設置session的時間(單位毫秒),需要注意的是此時間需要設置爲大於1分鐘,過短可能會導致session不過期的現象

也可以在redis中設置ttl值,此值應該是redis中存放的數據的過期時間。如果沒有做redis數據的重新更新,則最後一次設置到redis中的session數據在經過了ttl時間後會自動的清除redis中的緩存數據
  store: new RedisStore({
    host: "192.168.142.138",
    port: 6379,
    db: "0",

    ttl : 1000

  }),


這樣在程序中就可以獲取到對應的session數據了,如果要修改session的數據,可以直接將數據保存到session中即可。如下所示

router.get('/login', function(req, res){
console.log(req);
//定義user對象存儲頁面提交的數據
var user = {
name : req.query.name,
password : req.query.password
};
//將user對象存入到session中,在success.ejs頁面顯示相關信息
req.session.user = user;
res.render('success', {
title : "xxxffff",
user: req.session.user
}
);
});



6. 安裝superior,以便可以實時的檢測到系統文件的變化

使用如下命令安裝,需要注意的是superior必須全局安裝,否則錯誤命令會提示安裝到全局
npm -g install supervisor

安裝後就需要使用

supervisor app.js來啓動程序,而不是使用node app.js來啓動程序

7. 啓動系統

由於安裝了supervisor,而在express4.x版本中express的啓動方式修改爲npm start來啓動系統,其實在packapge.json中已經使用了
  "scripts": {
    "start": "node ./bin/www"
  },

來啓動系統的,因此此處需要修改爲
  "scripts": {
    "start": "supervisor ./bin/www"
  },


使用npm start來啓動系統

訪問http://localhost:3000即可


對於基本的環境已經搭建完畢,可以使用console.log(req.session)來在後臺打印session中的相關內容

檢查訪問後,是否在redis中可以看到相關的數據,可以使用redis的命令行工具來檢查相關的數據是否正確。


後續會加入mongodb來將相關數據保存到mongodb中






其中cookie設置session的時間(單位毫秒),需要注意的是此時間需要設置爲大於1分鐘,過短可能會導致session不過期的現象
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章