代码之家  ›  专栏  ›  技术社区  ›  positron

在Express应用程序中共享一个类实例

  •  0
  • positron  · 技术社区  · 4 年前

    我有一个应用程序,我想在其中共享一个singleton类——在应用程序开始时创建singleton,设置并在整个应用程序中使用特定于用户的数据。这现在工作得很好,但我不确定当多个用户访问应用程序时,这种方法会如何表现。我认为这不是线程安全的,会导致共享数据被使用它的不同进程覆盖。这是正确的吗?

    0 回复  |  直到 4 年前
        1
  •  1
  •   Heiko Theißen    4 年前

    我认为这不是线程安全的,会导致共享数据被使用它的不同进程覆盖。

    这是正确的。

    您所说的“在整个应用程序中使用”是什么意思?

    • 与用户相关的数据,即使用户注销并稍后再次登录,这些数据仍会保留?这需要一个数据库。
    • 还是仅在登录和注销之间需要的数据?

    在后一种情况下,您需要 会话处理 其中数据与一个浏览器会话相关联(从技术上讲是在浏览器关闭时删除的会话cookie)。一个例子是 express-session 包,允许您将所有与会话相关的数据写入 req.session 对象,此对象将被使用同一会话cookie发出的所有请求重新使用(即,在浏览器关闭之前,用户浏览器向您的应用程序发出的所有要求)。

    这个 请求会话 对象必须可通过JSON序列化,所以它不能是类实例。看见 this example 在软件包文档中。

    或者,如果仅在一个请求(由多个中间件功能共享)期间需要数据,则可以将它们写入 res.locals 。这甚至可以容纳类实例。

    推荐文章