我想制作一个Web服务,看起来回送是一个很好的起点。 为了解释我的问题,我将描述情况
我有2个MySQL表:
用户
公司
每个用户都有它的公司。就像是公司的主要用户。
我希望通过以下方式为每个公司创建产品表:
company1_产品,
company2_产品,
company3_产品
每家公司都有内部用户,例如:
company1_Users,
company2_Users,
company3_Users
内部用户正在从相应的子域登录,例如
company1.myservice.com
company2.myservice.com
对于API,我希望数据源从相应的表中获取产品。所以问题是,如何动态更改数据源?
以及如何处理用户?将数据存储在一个表中不好,因为内部公司用户可能位于不同的公司...
也许有更好的方法来制作这种模型?
答案 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