Node.js有状态服务器

我是一般的Node.js和服务器端JS的新手。

我来自Java EE,我习惯于使用有状态的对象(不是EJB,我使用CDI),例如,MVC。 我的目标是保留一些与例如会话有关的数据。

Java EE中的CDI知道以下状态范围:

  • 应用程序作用域(=与单例模式相同)
  • 会话作用域(状态保留用户的会话生命周期,例如login的用户)
  • 对话的范围(状态保留用于已识别的对话,例如购物车)
  • Flash作用域(两个请求之间保持状态)

如何使用Node来完成所有这些工作而不使用数据库,只需要使用有状态的对象?

你需要像连接一样跟踪会话状态,因为这是最简单的范围。 一旦你有了,你可以做如下的事情。

  • 应用程序作用域(=与单例模式相同)
    • 在你的HTTP服务器实例上设置一个属性: myServer.totalRequestsServed = 0
    • 或者可以使用进程范围的全局: global.totalRequestsServed = 0
  • 会话作用域(状态保留用户的会话生命周期,例如login的用户)
    • 使用连接会话中间件: req.session.user = myUser
  • 对话的范围(状态保留用于已识别的对话,例如购物车)
    • 我不完全清楚你的意思是“对话范围”,但是我会坚持这个在会话用户或共享哈希对象。 session.user.shoppingCart = {}
  • Flash作用域(两个请求之间保持状态)
    • 使用会话或请求这个。 在npm中有现有的模块给你req.flash("Welcome!")这样的req.flash("Welcome!") 。 请参阅连接闪光灯 。

就像在Java世界中一样,为了扩展性,您需要服务器关联或会话数据的外部存储。 将会话范围数据存储在服务器上(以及跨所有克隆复制)不可扩展。

  • 服务器关系可以通过cookie在下层安排。 在应用程序中不需要更改。
  • NodeJS中的外部存储支持可通过快速会话中间件获得。 它支持开箱即用的多个会话存储 。