最佳实践建议 - Loopback API

问题描述 投票:2回答:1

我想创建一个Web服务,看起来Loopback是一个很好的起点。为了解释我的问题,我将描述情况

我有2个MySQL表: 用户 公司 每个用户都拥有它的公司。它就像是公司的主用户。

我希望下一步为每家公司创建产品表: company1_Products, company2_Products, company3_Products

每家公司都有内部用户,例如: company1_Users, company2_Users, company3_Users

内部用户从相应的子域登录,例如 company1.myservice.com company2.myservice.com

对于API,我希望datasource从相应的表中获取产品。那么问题是,如何动态更改数据源?

以及如何处理用户?存储在一个表中并不好,因为内部公司用户可能在不同的公司......

也许有更好的方法来做这样的模型?

node.js api backend loopback
1个回答
0
投票

免责声明:我是LoopBack的合着者和当前维护者之一。

如何动态更改数据源?

以下StackOverflow答案描述了如何将单个模型(例如Product)附加到多个数据源的解决方案:https://stackoverflow.com/a/28327323/69868如果您为每个公司创建一个MySQL数据库而不是使用公司名称作为Product table name的前缀,则此解决方案将起作用。

为了实现您描述的内容,您可以使用模型子类。对于每个公司,定义一个新的公司特定的产品模型,该模型继承自共享的Product模型并更改表名。

// common/models/company1-product.json
{
  "name": "Company1_Product",
  "base": "Product",
  "mysql": {
    "tableName": "company1_Products"
  }
  // etc.
}

您甚至可以使用app.registry.createModel()app.model() API动态创建这些模型,然后运行dataSource.autoupdate为新模型创建SQL表。

以及如何处理用户?存储在一个表中并不好,因为内部公司用户可能在不同的公司......

我想你可以使用与产品相同的方法,正如你在问题中描述的那样。

也许有更好的方法来做这样的模型?

您面临的问题是多租户。恐怕我们还没有想出一个易于使用的解决方案。如何实现多租户有很多种可能的方法。

例如,您可以为每个公司(租户)创建一个LoopBack应用程序,然后创建顶级LoopBack或Express应用程序,以将传入请求路由到适当的特定于租户的LB应用程序实例。请参阅以下存储库以获取概念验证实现:https://github.com/strongloop/loopback-multitenant-poc

© www.soinside.com 2019 - 2024. All rights reserved.