1

我一直在搜索 Sails.js 多租户功能,我知道这样的功能还没有实现。我最初的想法是通过为每个租户创建一个数据库来构建多租户应用程序。

因为我意识到我还不能在 Sails.js 中做这样的事情,所以我尝试了一种不同的方法,只创建一个数据库 ( POSTGRES ),但有很多模式,每个模式都代表一个租户。我的问题是我不能/我不知道(甚至不知道这在 Sails/Postgres 适配器中是否可能)如何根据登录的用户动态地(在运行时)定义给定对象应该查询 aganist 的架构。

有没有人遇到过这样的问题?我该如何进行?

对不起英语,谢谢。

4

3 回答 3

1

根据我的经验,添加模型不起作用。唯一对我有用的是使用元调用来指定架构。

await Users.create(newUser).meta({ schemaName: 'admin' });

有点麻烦,但它正在工作。

希望这可以帮助某人。

于 2018-06-01T12:38:21.927 回答
0

我认为是水线续集适配器的问题,基于this answer

这样做的方法是在模型中添加一个属性

  meta: {
    schemaName: 'schema'
  },

但不起作用,您不能定义多个模式,只能将用户作为模式,如果在 config/models.js 中将属性模式设置为 true,则每个表的模式定义都不起作用。

于 2015-09-01T18:13:39.830 回答
0

线索在sails-postgresql适配器代码中——它的几个助手包括这一点:

var schemaName = 'public';
    if (inputs.meta && inputs.meta.schemaName) {
      schemaName = inputs.meta.schemaName;
    } else if (inputs.datastore.config && inputs.datastore.config.schemaName) {
      schemaName = inputs.datastore.config.schemaName;
    }

所以实际上驱动程序正在寻找一个默认名为public的模式,除非通过调用meta()提供不同的值,或者模式名称是在应用程序范围内配置的。

要为所有模型配置模式名称,需要在 postgresql 数据存储的配置中包含一个schemaName属性,该属性出现在datastore.js中:

...
default: {
   adapter: 'sails-postgresql',
   url: 'postgresql://username:password@localhost:5432/your_database_name',
   schemaName: 'your_schema_name_here'
}

一旦到位,您不必将meta({ schemaName: 'blah'})附加到任何查询。我为此苦苦挣扎了几天,终于以这种方式解决了它。

于 2019-10-03T16:01:25.667 回答