2016-07-06 61 views

回答

2

Express在其核心中沒有會話處理實現。您必須使用session中間件,然後用它來處理會話。 (它通過快速生成器自動安裝)

如果您查看會話模塊的文檔,您會發現它可以使用不同類型的存儲來存儲會話數據。內存是默認使用的,由於設計的內存泄漏,只能用於開發目的。對於生產,您可以使用您選擇的商店,如connect-redisconnect-mysql等等。

回答您的問題:

  • 中間件然後暴露req.session,你可以用它來訪問 會話數據。
  • req.app是一個表達應用程序實例的參考,並且有 與會話無關。
  • app.set用於設置應用程序級別的本地人,並且 用於會話。
  • 當您使用RedisStore時,您的會話數據存儲在Redis 數據庫中。
+0

是的,我正在使用Redis Store來存儲會話。上面提到的三分之一是每個會話臨時數據存儲的理想選擇? – user3018765

+0

取決於您的需求,但一般來說是的,redis是會話存儲的不錯選擇,因爲它是內存數據庫,因此訪問數據的速度非常快 – razakj

+0

我指的是req.session中的哪一個vs req.app vs app.set – user3018765

0

req.app是與正在處理當前請求的路由處理程序關聯的Express app對象的引用。這使您可以更輕鬆地訪問該對象,特別是在路徑在單獨模塊中定義的情況下。

所以,如果你做了這樣的事情:

app.get('/viewdirectory', require('./mymiddleware.js')) 

然後,中間件將能夠通過req.app它否則將沒有那個能力,而無需手動傳遞一個請求期間到達app對象app對象在一個不太方便的模塊構造函數中。

app.set()是在app對象上設置各種配置選項的能力。這些選項記錄在here

req.session是某會話中間件使用的會話對象。 Express不會預先配置內置的會話管理。 Express有許多不同的會話附件。其中一些人使用中間件將會話放置在req.session中,以便您可以在任何請求處理程序中輕鬆訪問它。將會話引用放在req.session中是一個常見的約定,它使請求處理程序在請求服務時很容易找到。

會話實際上是否存儲在請求之外的更長時間取決於特定的會話實現。一些會話只存儲在內存中的JS對象中。有些存儲在像redis這樣的共享內存數據庫中。有些存儲在常規的基於文件的數據庫中。某些會話實現允許您選擇要使用的會話存儲類型。