Keystone.js: 在多个站点使用一个模型

Keystone.js: use one model in multiple sites

我需要使用 Keystone.js(站点网络)创建多个站点。我有一个参考集,应该在每个站点上使用它作为与其他网络站点中模型的关系。这就像在所有网络站点上使用的通用标签列表。希望你明白我的意思。抱歉我的英语不好。

我认为这本身是不可能的,但是如果它是一个参考集合,那么为什么不 运行 它在它自己的站点上,并让所有其他站点查询该站点的数据?

我曾尝试 运行在同一实例中连接两个站点一次。它会导致所有具有相同名称的模型在数据库中共享一个集合,这并不是一件好事,因为这意味着 keystone 创建的 updates 集合将在应用程序以及任何用户之间共享(除非你称用户模型在每个站点上都不同)。它当然不是为了解决这个问题而设计的。

在没有真正理解您的用例的情况下,我看到了两种可能的架构需要探索:

  1. 单个梯形校正实例:

    看看你是否可以设计你的数据来使用继承并尝试把 一个 keystone 实例中的所有站点。 IE 你可以有一个 parent "Post" 模型,然后每个站点 "FooPost"、"BarPost" 继承 来自 post。这样你就可以使用股票 keystone/mongoose 关系机制和 built-in CRUD bootstraps。缺点在这里 这种架构是否会让您的管理员 UI 和数据模型更加 复杂,但我认为它是 "partitioning" 的潜在解决方案 单个 keystone 实例到单独的站点。这可能会更好 在一个实例中只有几个 "sites" 就可以了 使数据模型和管理用户体验过于复杂而无法使用。

    优点:可以使用 keystone 库存 CRUD/relationships

    缺点:更复杂的管理用户体验,您必须自己手动将前端分区以保持数据分离,使用大量继承的更复杂的数据结构

  2. 单独的梯形校正实例:

    在不同的 keystone 实例(如公共标签列表)之间共享 non-relational 数据的轻量级方法可能只是 bootstrap api 到 "tag" 的包装器为每个站点建模,并向每个 keystone 实例 API 添加 api CRUD 调用。然后,您可以通过猫鼬挂钩调用 CRUD api 来跨站点维护模型数据。有很多示例可以助推 keystone CRUD api,您可以在模型的 post 保存、post 删除或 [=61] 中进行 api CRUD 调用=]更新。

    建立关系模型会更复杂。我会在每个站点上创建一个 "Link" 模型,它只不过是一个 URL 字段和一个 _id。在您尝试与之共享关系的每个站点的模型中设置一对多关系,并将 Link 模型包装在 CRUD api 中。通过这种方式,您可以 "link" 将模型组合在一起,它们将呈现为管理页面上的可点击链接。您将不得不编写相当数量的挂钩和 API 调用,但我认为这是一个可能允许某些事务数据同步容差的系统的可行架构(IE,您不会尝试这种类型的架构来做任何事情这需要非常严格的交易完整性,但对于社交媒体来说可能没问题)。

    优点:关注点分离、更清晰的数据模型、分区的管理屏幕(对于某些用例来说可能是缺点)

    缺点:需要同步数据模型架构(您可以对通用 keystone 模型 github 存储库进行子模块化,并在所有站点之间共享它以解决我之前做过的这个问题),更多 api 和模式挂钩代码,每个站点都有单独的管理 UX,更多系统管理员工作 运行 并同步单独的实例