如何在代码中(动态)为自定义环回模型动态创建和公开新的 REST 端点

How to Dynamically Create and Expose a New REST Endpoint In Code (on the fly) for a Custom Loopback Model

我们正在开发一种 SaaS 会计产品,它使用 Loopback REST 框架并允许经过身份验证的最终用户在他们自己的数据库实例(MySQL 或 PostgreSQL)中创建新的 table。

问题:我们如何在代码中(即时)创建一个新的根级 Loooback REST 端点来访问新的 table?例如,如果用户添加一个名为 'cars' 的新 table,我们需要在名为 '/api/cars' 的代码中公开一个新的根级 REST 端点使用持久模型提供完整的 CRUD 功能,无需重新启动 Node.js 实例,也无需将 JSON 文件写入磁盘。

注意:此题与类似。然而,该问答仅涉及在代码中创建新模型,并未解决如何公开新的自定义根级别 REST 端点以访问新模型。

我发现这个 interesting post 似乎朝着正确的方向前进,但我们不确定如何创建新的根 REST 端点,然后将其连接到动态生成的模型。此外,我们使用 Kendo 而不是 Angular:

angular.module('my-app-module')
  .config(function(LoopBackResourceProvider) {
    // Change the URL where to access the LoopBack REST API server
    LoopBackResourceProvider.setUrlBase('http://api.example.com/');
  });

您需要做的就是create a new model 即时附加到数据源。创建模型后,所有端点都可以命中它!

var ds = app.datasources['my-data'];
ds.createModel('Car', {
  model: String,
  make: String,
  year: number
});

这是我们最终得到的解决方案:

// server\boot.js

var ds = app.datasources['mysql'];    
ds.createModel('transactiontype', {
    rowid: {
        type: Number,
        id: true
    },
    transactiontypeid: String,
    description: String,
    active: Number
});    
let model = ds.getModel('transactiontype');    
app.model(model, { public: true });