我們在Express應用程序中req.session與req.app與app.set的區別。假設我有Redis會話存儲。它們全部保存在會話存儲器或內存中。req.session與req.app和app.set之間的區別
0
A
回答
2
Express在其核心中沒有會話處理實現。您必須使用session中間件,然後用它來處理會話。 (它通過快速生成器自動安裝)
如果您查看會話模塊的文檔,您會發現它可以使用不同類型的存儲來存儲會話數據。內存是默認使用的,由於設計的內存泄漏,只能用於開發目的。對於生產,您可以使用您選擇的商店,如connect-redis,connect-mysql等等。
回答您的問題:
- 中間件然後暴露
req.session
,你可以用它來訪問 會話數據。 req.app
是一個表達應用程序實例的參考,並且有 與會話無關。app.set
用於設置應用程序級別的本地人,並且 用於會話。- 當您使用RedisStore時,您的會話數據存儲在Redis 數據庫中。
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這樣的共享內存數據庫中。有些存儲在常規的基於文件的數據庫中。某些會話實現允許您選擇要使用的會話存儲類型。
相關問題
- 1. Composer.phar與|之間的區別和||
- 2. chrome.webNavigation.onCompleted和chrome.tabs.onUpdated.addListener與'complete'之間的區別
- 3. 更新與NULL和''之間的區別?
- 4. char *和char []與strcpy()之間的區別()
- 5. BlackBerry與OTAInstall和StandardInstall之間的區別
- 6. 「或」與「||」之間的區別?
- 7. ~~與Math.floor之間的區別()
- 8. 關注與責任之間的區別(即SRP和SoC之間的區別)?
- 9. 之間的〜/和的區別../
- 10. '#','%'和'$'之間的區別
- 11. {!!之間的區別!!}和{{}}
- 12. '+ ='和'= +'之間的區別?
- 13. 「。+」和「。+?」之間的區別
- 14. .eq之間的區別。和==
- 15. #。/和#之間的區別。 ./
- 16. !=和!之間的區別==
- 17. 「%〜dp0」和「。\」之間的區別?
- 18. | =和^ = css之間的區別
- 19. 之間的區別。和#
- 20. ==和case之間的區別?
- 21. 「**/* /」和「** /」之間的區別?
- 22. jQuery - '。'之間的區別和「#」
- 23. 「?1」和「?」之間的區別
- 24. `%in%`和`==`之間的區別
- 25. fmod和%之間的區別
- 26. 之間的區別:+和:+
- 27. PAM與Metis分區之間的區別
- 28. 與別名之間的區別
- 29. 時間()與stime()之間的區別
- 30. 指令與模板之間的區別與沒有模板和Angular 1.2和1.1之間的區別?
是的,我正在使用Redis Store來存儲會話。上面提到的三分之一是每個會話臨時數據存儲的理想選擇? – user3018765
取決於您的需求,但一般來說是的,redis是會話存儲的不錯選擇,因爲它是內存數據庫,因此訪問數據的速度非常快 – razakj
我指的是req.session中的哪一個vs req.app vs app.set – user3018765