【问题标题】:Is there a better way to store Javascript class object somewhere for later use?有没有更好的方法将 Javascript 类对象存储在某处以备后用?
【发布时间】:2021-01-18 04:26:09
【问题描述】:

有没有办法将_MYOBJ 存储在数据库中以备后用?

let _MYOBJ = new ClassName(args);

用例:我有一个对传入事件保持打开状态的事件通道,但有时我必须在该通道上订阅更多事件。要订阅更多事件,我确实需要访问该对象。目前,我将通道的所有对象存储在一个全局变量中,如下所示。

_TENANT_CHANNEL_OBJECT[`${_TENANT_ID}`] = _MYOBJ;

所以当我需要它时,我可以使用全局对象。哪个工作正常,但是,我不确定这是否是最佳做法。

有人可以推荐一个替代品吗?

【问题讨论】:

  • 与其全局考虑,不如考虑为这类事情使用 模块 - 显式依赖使代码更易于维护

标签: javascript node.js object


【解决方案1】:

您想将此数据存储在应用程序内存之外的某个位置是对的,这可能会导致您的应用程序崩溃并丢失数据,并可能导致您在云托管环境中出现问题。您会希望它在数据库或类似的数据存储中。

_MYOBJ 是上面的类实例时,将其存储在数据库中可能不是一个好主意。您绝对不想将代码存储在数据库中,而只是存储数据。所以 JavaScript 中的类(它实际上是一个底层对象),带有方法和原型链等,不是一个好的候选者。

但是。 NoSQL 数据库(如 MongoDB),甚至某些 SQL 数据库(如 Postgresql)都允许您在数据库中存储 JSON 对象。这可能就是您正在寻找的。​​p>

我不确定您的通道对象是什么样的,但只要它们不包含函数,并且您可以将它们序列化为 JSON 数据,您就可以将它们写入您的数据库并稍后读取它们。

您需要查看有关您使用的任何数据库和/或库的文档,以了解如何存储数据。

此外,它不是数据库,但Redis 是一个出色的键/值外部内存缓存,它还为您提供开箱即用的 pub/sub,超级易于使用,并且具有出色的 node.js SDK .根据您的设置,它可能是多余的或不必要的。

最后,如果我离题太远,请原谅我,但是如果您不熟悉 ORM 的概念,它们将改变您的生活,它们是您的应用程序与数据库接口的梦想--我用TypeORM取得了不错的成绩

【讨论】:

  • 我确实将对象存储在本地存储中,但是我确实有需要访问的功能。但是使用现有代码,当我重新启动应用程序时,我确实会丢失对象,但理想情况下,如果我的对象包括函数、计时器、订阅 ID,那么我不必担心重新订阅所有事件。
  • 我明白了。尽管这很诱人,但您永远不应该将代码存储在数据存储中:这可能是一个很大的安全漏洞,并且在推送更新时会给您带来极大的痛苦。您应该只能存储数据,并且当您的应用程序运行时,您可以将数据读入您的类/对象/函数/任何东西,然后它可以与您的应用程序的其余部分进行交互。在不了解所有细节的情况下,我无法为您提供更详细的示例,但您的用例听起来仍然非常适合 Redis 或类似产品
【解决方案2】:

如果数据量比较少,又不需要数据库,或许可以将数据序列化后存储在本地。您也许可以只使用一个 cookie,或者您可以使用本地存储。

https://www.w3.org/TR/webstorage/

https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage

【讨论】:

    猜你喜欢
    • 2013-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多