如何在代码中(动态)为自定义环回模型动态创建和公开新的 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 });
我们正在开发一种 SaaS 会计产品,它使用 Loopback REST 框架并允许经过身份验证的最终用户在他们自己的数据库实例(MySQL 或 PostgreSQL)中创建新的 table。
问题:我们如何在代码中(即时)创建一个新的根级 Loooback REST 端点来访问新的 table?例如,如果用户添加一个名为 'cars' 的新 table,我们需要在名为 '/api/cars' 的代码中公开一个新的根级 REST 端点使用持久模型提供完整的 CRUD 功能,无需重新启动 Node.js 实例,也无需将 JSON 文件写入磁盘。
注意:此题与
我发现这个 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 });