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

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

如果没有真正了解您的使用案例,我会看到两个潜在的架构可供探索

  1. 单个keystone实例:

    看看你是否可以devise你的数据使用inheritance,并尝试把所有的网站在一个keystone实例。 IE浏览器可以有一个父“Post”模型,然后每个站点“FooPost”,“BarPost”,从后inheritance。 这样你就可以使用股票基石/mongoose关系机制和内置的CRUD引导。 这里的缺点是这种架构会使你的pipe理界面和数据模型变得更加复杂,但是我认为它是将单个keystone实例“分区”到不同站点的潜在解决scheme。 在一个实例上,这可能对一些“站点”更好,因为这样会使数据模型和pipe理员用户界面太复杂而无法使用。

    优点:可以使用梯形库存CRUD /关系

    缺点:更复杂的pipe理用户体验,你必须自己手动分割前端,以保持数据分离,更复杂的数据结构使用大量的inheritance

  2. 独立的keystone实例:

    在不同的keystone实例之间共享非关系数据的一种轻量级的方法(就像通用的标签列表)可能只是为每个站点引导api包装到“标签”模型,并将api CRUD调用添加到每个keystone实例API。 然后,您可以通过mongoose钩子调用CRUD API来维护跨站点的模型数据。 有大量的例子来推动keystone CRUD API,你可以在模型的后期保存,后删除或后期更新中进行api CRUD调用。

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

    优点:关注点分离,更清洁的数据模型,分区pipe理屏幕(也许是一些使用情况)

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

我不认为这是可能的,但是如果它是一个引用集合,那么为什么不直接运行它自己的网站,并让所有其他网站查询数据?

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