Node.js 最佳实践建议-环回API

Node.js 最佳实践建议-环回API,node.js,api,backend,loopback,Node.js,Api,Backend,Loopback,我想做一个Web服务,看起来环回是一个很好的起点。 为了解释我的问题,我将描述情况 我有两个MySQL表: 用户 公司 每个用户都有自己的公司。它就像是公司的主用户 我希望下一步为每个公司创建产品表: 公司1_产品, 公司2_产品, 公司3_产品 每个公司都有内部用户,如: 公司1_用户, 公司2\u用户, 公司3_用户 内部用户正在从相应的子域登录,如 company1.myservice.com company2.myservice.com 对于API,我希望datasource从相应的表中

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

我有两个MySQL表:
用户
公司
每个用户都有自己的公司。它就像是公司的主用户

我希望下一步为每个公司创建产品表:
公司1_产品,
公司2_产品,
公司3_产品

每个公司都有内部用户,如:
公司1_用户,
公司2\u用户,
公司3_用户

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

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

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

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

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

如何动态更改数据源

下面的StackOverflow回答描述了如何将单个模型(例如产品)附加到多个数据源的解决方案:如果您为每个公司创建一个MySQL数据库,而不是使用公司名称作为产品表名称的前缀,则此解决方案可以工作

// common/models/company1-product.json
{
  "name": "Company1_Product",
  "base": "Product",
  "mysql": {
    "tableName": "company1_Products"
  }
  // etc.
}
为了实现您所描述的,您可以使用模型子类化。对于每个公司,定义一个新的公司特定产品模型,该模型继承自共享的
产品
模型并更改表名

// common/models/company1-product.json
{
  "name": "Company1_Product",
  "base": "Product",
  "mysql": {
    "tableName": "company1_Products"
  }
  // etc.
}
您甚至可以使用
app.registry.createModel()
app.model()
API动态创建这些模型,然后运行
dataSource.autoupdate
为新模型创建SQL表

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

我想您可以使用与您在问题中描述的产品相同的方法

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

您面临的问题是调用多租户。恐怕我们还没有找到一个易于使用的解决方案。有许多可能的方法可以实现多租户

例如,您可以为每个公司(租户)创建一个环回应用程序,然后创建顶级环回或Express应用程序,以将传入请求路由到相应的租户特定的LB应用程序实例。有关概念验证实施,请参见以下存储库: