最佳实践建议-回送API

时间:2018-11-06 16:05:46

标签: node.js api backend loopback

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

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

我希望通过以下方式为每个公司创建产品表:
company1_产品,
company2_产品,
company3_产品

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

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

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

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

也许有更好的方法来制作这种模型?

1 个答案:

答案 0 :(得分:0)

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

  

如何动态更改数据源?

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

要实现您所描述的内容,可以使用模型子类化。对于每个公司,定义一个新的公司特定的产品模型,该模型继承自共享的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