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

时间:2016-07-25 16:00:51

标签: javascript node.js mongoose keystonejs

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

2 个答案:

答案 0 :(得分:1)

如果没有真正了解您的用例,我会看到两种可能的架构需要探索:

  1. 单个keystone实例:

    看看您是否可以设计数据以使用继承并尝试使用 一个keystone实例中的所有站点。 IE你可以有一个父母 "邮政"模型,然后是每个网站" FooPost"," BarPost"继承 从帖子。这样你就可以使用股票keystone / mongoose 关系机制和内置CRUD引导。这里有缺点 这种架构将使您的管理UI和数据模型更多 复杂,但我认为它是一个潜在的解决方案"分区"一个 单个keystone实例进入单独的站点。这可能会更好 只有少数"网站"在一个实例上,那就更多了 使数据模型和管理UX过于复杂而无法使用。

    优点:可以使用keystone stock CRUD / relationship

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

  2. 单独的keystone实例:

    在单独的keystone实例(如公共标记列表)之间共享非关系数据的轻量级方法可能是将api包装器引导到"标记"每个站点的模型,并为每个keystone实例API添加api CRUD调用。然后,您可以通过mongoose挂钩调用CRUD api来跨站点维护模型数据。有很多例子来提升keystone CRUD api,你可以在模型的保存,删除后或更新后的帖子中进行api CRUD调用。

    建模关系会更复杂。我会创建一个" Link"每个网站上的模型只不过是一个URL字段和一个_id。在您尝试与之共享关系的每个站点上的模型中设置一对多关系,并将链接模型包装在CRUD API中。这样你就可以"链接"模型在一起,它们将在管理页面上呈现为可点击的链接。您将不得不编写相当数量的钩子和API调用,但我认为这是一个可能允许一些事务数据同步容忍的系统的可行架构(IE你不会尝试这种类型的架构用于任何需要超紧的交易完整性,但它可能适用于社交媒体)。

    优点:关注点分离,清理数据模型,分区管理屏幕(某些用例可能是骗局)

    缺点:需要同步数据模型架构(你可以子模块一个普通的keystone模型github repo并在所有站点之间共享它来解决这个问题我以前做过的事情),更多的api和架构钩子代码,每个站点都有一个单独的管理员用户体验,更多系统管理员工作以运行和同步单独的实例

答案 1 :(得分:0)

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

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