Node.js有状态服务器
我是一般的Node.js和服务器端JS的新手。
我来自Java EE,我习惯于使用有状态的对象(不是EJB,我使用CDI),例如,MVC。 我的目标是保留一些与例如会话有关的数据。
Java EE中的CDI知道以下状态范围:
- 应用程序作用域(=与单例模式相同)
- 会话作用域(状态保留用户的会话生命周期,例如login的用户)
- 对话的范围(状态保留用于已识别的对话,例如购物车)
- Flash作用域(两个请求之间保持状态)
如何使用Node来完成所有这些工作而不使用数据库,只需要使用有状态的对象?
你需要像连接一样跟踪会话状态,因为这是最简单的范围。 一旦你有了,你可以做如下的事情。
- 应用程序作用域(=与单例模式相同)
- 在你的HTTP服务器实例上设置一个属性:
myServer.totalRequestsServed = 0
- 或者可以使用进程范围的全局:
global.totalRequestsServed = 0
- 在你的HTTP服务器实例上设置一个属性:
- 会话作用域(状态保留用户的会话生命周期,例如login的用户)
- 使用连接会话中间件:
req.session.user = myUser
- 使用连接会话中间件:
- 对话的范围(状态保留用于已识别的对话,例如购物车)
- 我不完全清楚你的意思是“对话范围”,但是我会坚持这个在会话用户或共享哈希对象。
session.user.shoppingCart = {}
- 我不完全清楚你的意思是“对话范围”,但是我会坚持这个在会话用户或共享哈希对象。
- Flash作用域(两个请求之间保持状态)
- 使用会话或请求这个。 在npm中有现有的模块给你
req.flash("Welcome!")
这样的req.flash("Welcome!")
。 请参阅连接闪光灯 。
- 使用会话或请求这个。 在npm中有现有的模块给你
就像在Java世界中一样,为了扩展性,您需要服务器关联或会话数据的外部存储。 将会话范围数据存储在服务器上(以及跨所有克隆复制)不可扩展。
- 服务器关系可以通过cookie在下层安排。 在应用程序中不需要更改。
- NodeJS中的外部存储支持可通过快速会话中间件获得。 它支持开箱即用的多个会话存储 。